`
septem
  • 浏览: 54806 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SQL语言艺术(八)认识困难:处理困难

    博客分类:
  • sql
阅读更多
本章讨论对SQL而言实际中经常遇到的困难与相应的解决策略

看似高效的查询条件

有些选择条件乍一看很高效,但需要稍加修改才能发挥潜力。遇到基于键值的一部分比较等特殊情况,比如信用卡前置码比较,可使用范围条件来表达,并尽量使用下限和上限值
select count(*)
    from credit_card_check
    where ? like prefix + '%'

如果prefix字段长度可变,很可能无法使用这个字段上的索引,可以将条件改为:
where substring(? + '0000000000000000000', 1, 19) between lower_bound
                                                          and upper_bound

抽象层封装不当

在程序中对数据库访问进行封装时,有很多需要注意的地方。比如先查出一批数据,然后在程序中进行过滤,这时应该考虑将过滤直接放在SQL中

分布式系统的复杂性

在分布式系统的情况下,不仅访问远程服务器会造成性能下降,如果本地无法访问远程数据库的字典信息,则优化器无法进行适当的优化

尽量在靠近数据的地方进行过滤操作,如果查询要连接远程的多张表,最好先在远程服务器上join好涉及到的表,再接结果返回到与本地表进行join操作,这种情况下可以考虑将远程表的join操作定义成视图,避免DBMS分别读取两个远程表的数据

动态定义的搜索条件常常成为性能瓶颈

动态条件背后是一连串可怕的需求:支持用户通过界面输入搜索条件和排序条件。这类应用一般表现为:开始查询执行地相当好,但随着时间的推移,查询变得非常慢。此类问题很难修正,因为所有的东西都是动态的。要查询的是相同表的相同字段,而搜索条件会发生变化,成功的关键是如何聪明地产生SQL查询

select语句中有可能要用到distinct,因为如果用户没有输入任何条件,返回的结果里面可能会有重复记录。另外不能直接将SQL语句与用户的输入值进行拼接,而是以'?'做为占位符,采用SQL预编译的形式,一方面数据库会缓存预编译的SQL,便于重复使用提高性能,另一方面可以避免SQL注入的漏洞

动态拼接没有完美的解决方案,从设计简单角度讲,可能会把所有涉及的表都预先连接好,再动态生成用户输入的过滤条件。如果负载量比较大,出现性能问题的时候,可以考虑定制SQL,即根据用户的输入只连接需要的表,但这会加大设计上的复杂度。以更聪明的方式建立查询,可以更好地控制安全性,结果正确性和性能,而更为简单的解决方案可能会牺牲某一方面的质量,具体的方案要视实际情况而定
2
0
分享到:
评论

相关推荐

    SQL语言艺术 PDF电纸书

    《SQL语言艺术》是一本深度探讨SQL编程技巧与实践的电纸书,由京华志与精华志联合出品。这本书旨在帮助读者提升SQL查询能力,理解数据库管理的核心概念,并掌握在实际开发中如何高效地使用SQL。对于标签中提到的"C#...

    MICROSOFT SQL SERVER 2008技术内幕:T-SQL语言基础.pdf

    T-SQL(Transact-SQL)是SQL Server专用的数据库查询语言,它是标准SQL语言的扩展,通过增加流程控制语句、变量、函数等,来支持复杂的数据处理任务。 在本节中,我们重点介绍T-SQL的基础知识,内容将涵盖以下几个...

    SQL语言艺术 中文

    SQL语言艺术SQL语言艺术SQL语言艺术SQL语言艺术SQL语言艺术SQL语言艺术SQL语言艺术

    SQL语言艺术.pdf

    第8章,孰优孰劣:认识困难,处理困难 指出如何认识和处理比较棘手的情况 第9章,多条战线:处理并发 讲解如何处理并发 第10章,集中兵力:应付大数据量 讲解如何应付大数据量 第11章,精于计谋:挽救...

    SQL语言艺术

    资源名称:SQL语言艺术资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    SQL语言艺术(面向高级开发工程师)

    第8章,孰优孰劣:认识困难,处理困难 指出如何认识和处理比较棘手的情况 第9章,多条战线:处理并发 讲解如何处理并发 第10章,集中兵力:应付大数据量 讲解如何应付大数据量 第11章,精于计谋:挽救响应时间 分享...

    SQL语言艺术+The Art of SQL(双语)

    《SQL语言艺术+The Art of SQL》是一本深入...总之,《SQL语言艺术+The Art of SQL》是学习和提升SQL技能的宝贵资源,书中的知识将帮助你设计出高性能的数据库,编写出高效的SQL查询,从而在数据处理的世界中游刃有余。

    sqlserver驱动包:sqljdbc4.jar

    在这个特定的场景中,`sqljdbc4.jar`是一个特定于SQL Server的实现,它包含了必要的类和方法,让Java程序能够连接到SQL Server数据库,执行SQL查询,处理结果集,并进行其他数据库操作。 首先,让我们深入了解`sql...

    Sql语言学习全套-给力推荐

    Sql语言学习全套-给力推荐 Sql语言学习全套-给力推荐 alterfunction.sql alterproc_alterfunc.sql createtable.sql CURSOR.sql cursor_declare_open.sql functions.sql insert work.sql insertdualdata.sql...

    Microsoft_SQL_Server_2005技术内幕:T-SQL查询.pdf

    本书适合专业数据库开发者、BI开发者、DBA和以SQL Server作为后台数据库的一般应用程序开发者,读者可以通过书中的最佳实践、高级技巧和代码示例来掌握这门复杂的编程语言,以切合实际的方案来解决复杂的实际问题。...

    plsql oracle 详细 教程

    该语言集成于数据库服务器中,所以 PL/SQL 代码可以对数据进行快速高效的处理。 PL/SQL 语言的主要特点包括: * 高效处理数据:PL/SQL 语言可以对数据进行快速高效的处理。 * 集成于数据库服务器:PL/SQL 语言集成...

Global site tag (gtag.js) - Google Analytics