在程序开发中怎样写
语句可以提高数据库的性能
、 首先要搞明白什么叫执行计划?
执行计划是数据库根据
语句和相关表的统计信息作出的一个查询方案,这个方案是由
查询优化器自动分析产生的,比如一条
语句如果用来从一个
万条记录的表中查
条
记录,那查询优化器会选择“索引查找”方式,如果该表进行了归档,当前只剩下
条记
录了,那查询优化器就会改变方案,采用“全表扫描”方式。
可见,执行计划并不是固定的,它是“个性化的”。产生一个正确的“执行计划”有两点很重要:
语句是否清晰地告诉查询优化器它想干什么?
查询优化器得到的数据库统计信息是否是最新的、正确的?
、 统一
语句的写法
对于以下两句
语句,程序员认为是相同的,数据库查询优化器认为是不同的。
其实就是大小写不同,查询分析器就认为是两句不同的
语句,必须进行两次解析。生
成
个执行计划。所以作为程序员,应该保证相同的查询语句在任何地方都一致,多一个
空格都不行!
、 不要把
语句写得太复杂
我经常看到,从数据库中捕捉到的一条
语句打印出来有
张
纸这么长。一般来说这
么复杂的语句通常都是有问题的。我拿着这
页长的
语句去请教原作者,结果他说时
间太长,他一时也看不懂了。可想而知,连原作者都有可能看糊涂的
语句,数据库也
一样会看糊涂。
一般,将一个
语句的结果作为子集,然后从该子集中再进行查询,这种一层嵌套语
句还是比较常见的,但是根据经验,超过
层嵌套,查询优化器就很容易给出错误的执行
计划。因为它被绕晕了。像这种类似人工智能的东西,终究比人的分辨力要差些,如果人
都看晕了,我可以保证数据库也会晕的。
另外,执行计划是可以被重用的,越简单的
语句被重用的可能性越高。而复杂的
语句只要有一个字符发生变化就必须重新解析,然后再把这一大堆垃圾塞在内存里。可想
而知,数据库的效率会何等低下。
、 使用“临时表”暂存中间结果
简化
语句的重要方法就是采用临时表暂存中间结果,但是,临时表的好处远远不止这
些,将临时结果暂存在临时表,后面的查询就在
中了,这可以避免程序中多次扫
描主表,也大大减少了程序执行中“共享锁”阻塞“更新锁”,减少了阻塞,提高了并发性能。
、
系统
语句必须采用绑定变量
评论