本章讨论对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,即根据用户的输入只连接需要的表,但这会加大设计上的复杂度。以更聪明的方式建立查询,可以更好地控制安全性,结果正确性和性能,而更为简单的解决方案可能会牺牲某一方面的质量,具体的方案要视实际情况而定
分享到:
相关推荐
第8章,孰优孰劣:认识困难,处理困难 指出如何认识和处理比较棘手的情况 第9章,多条战线:处理并发 讲解如何处理并发 第10章,集中兵力:应付大数据量 讲解如何应付大数据量 第11章,精于计谋:挽救响应时间 分享...
第8章,孰优孰劣:认识困难,处理困难 指出如何认识和处理比较棘手的情况 第9章,多条战线:处理并发 讲解如何处理并发 第10章,集中兵力:应付大数据量 讲解如何应付大数据量 第11章,精于计谋:挽救...
第8章,孰优孰劣:认识困难,处理困难 指出如何认识和处理比较棘手的情况 第9章,多条战线:处理并发 讲解如何处理并发 第10章,集中兵力:应付大数据量 讲解如何应付大数据量 第11章,精于计谋:挽救响应时间...
第8章,孰优孰劣:认识困难,处理困难 指出如何认识和处理比较棘手的情况 第9章,多条战线:处理并发 讲解如何处理并发 第10章,集中兵力:应付大数据量 讲解如何应付大数据量 第11章,精于计谋:挽救响应时间 分享...
第8章,孰优孰劣:认识困难,处理困难 指出如何认识和处理比较棘手的情况 第9章,多条战线:处理并发 讲解如何处理并发 第10章,集中兵力:应付大数据量 讲解如何应付大数据量 第11章,精于计谋:挽救响应时间 分享...
第8章,孰优孰劣:认识困难,处理困难 指出如何认识和处理比较棘手的情况 第9章,多条战线:处理并发 讲解如何处理并发 第10章,集中兵力:应付大数据量 讲解如何应付大数据量 第11章,精于计谋:挽救响应时间 分享...
8 孰优孰劣:认识困难,处理困难 看似高效的查询条件 抽象层 分布式系统 动态定义的搜索条件 9 多条战线:处理并发 数据库引擎作为服务提供者 并发修改数据 10 集中兵力:应付大数据量 增长的数据量 数据仓库 11 精...
《基础电子中的SQL语言艺术》一书探讨了在信息技术领域中,SQL语言的重要性和其在数据处理中的核心地位。随着数据量的快速增长,SQL已经成为了基础电子和IT教育中的必要组成部分。开发者通常声称掌握了SQL,但这往往...
编程与制作蛋糕,乍看之下似乎是两个风马牛不相及的领域,一个是抽象的数字世界,另一个则是具象的味觉艺术。然而,当我作为一名天才蛋糕师首次踏入编程的世界,我发现这两个看似迥异的领域之间有着许多相通之处。 ...
艺术大家通常是创造出自己的套路,比如明末清初,水墨画法开始成熟,这时画树就不用勾勒这个模式了,而是一笔 下去,浓淡几个叶子,待毛笔的水墨要干枯时,画一下树干,这样,一个活生写意的树就画出来. 我上面这些描述其实...