ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【SQL优化】SQL优化的10点注意事项

【SQL优化】SQL优化的10点注意事项

原创 Linux操作系统 作者:secooler 时间:2009-09-03 21:21:00 0 删除 编辑
1.目前普遍采用的10g数据库已经采用CBO的优化方式,所以记得定期的对数据库核心业务用户进行全面或有选择的分析,防止出现执行计划出现异常。
Oracle 10g以及以后的11g自动化一切的背后隐藏着很多神秘而有趣的东西。

2.充分共享SQL语句,方法是在书写程序的时候尽量使用绑定变量
是否能共享SQL语句需要满足如下三个条件:
1)能共享的SQL语句需要每个字符都要完全一样,即使是空格的数量也要一样;
2)需要语句所引用的的对象必须完全相同,如果引用的是不同用户的内容也无法共享
3)绑定变量的名字要求必须一样

3.程序中全面禁止使用select *样式的SQL语句
原因之一:Oracle会将“*”依次转换成所有的列名,需要查询数据字典,耗费资源;
原因之二:考虑到表结构的变化,不利于程序的维护。

4.减少数据库访问的次数,这点符合“少读和少写原则”
原因:访问数据库解析是有代价的
例如:能用一条关联语句查询出来结果时,就不要分多条语句进行检索。

5.对于需要快速大批量的删除数据时,要使用TRUNCATE替代DELETE操作。

6.在使用like语句时,避免使用like '%abc'形式,否则无法使用到索引(对索引特殊处理除外)
原因:WHERE子句中, 如果索引列所对应的值的第一个字符由通配符(WILDCARD)开始, 索引将不被采用。

7.不要在索引列上进行函数类的计算
原因:WHERE子句中,如果对索引列进行函数计算,优化器将不能有效的使用索引而选择全表扫描。
迂回的处理方法:如果确实要频繁的使用到函数操作,可以考虑在相应列上使用函数索引。

8.不要在索引列上使用IS NULL和IS NOT NULL做限制条件
原因:Oracle中的null在索引中是不记录的。

9.在索引列上可以考虑使用UNION代替OR运算符
原因:
使用UNION代替OR的方法从执行计划上来看,避免了FILTER操作,降低了一致性读(consistent gets),从而提高了SQL的运行效率。
如果操作的是索引列,更加推荐使用这样的替换方式,可以有效的提高SQL的执行效率,这也是OR运算符的一种很好的优化方法。
如果不是索引列,需要具体情况具体分析。
OR运算符的优化,有时也可以考虑通过IN的方式来限制,也可以不同程度的提高一些SQL的运行性能

10.第十点就是优化最最基本的原则——优化后达到“少读少写”的目的
通过执行计划等有效的工具来反复比较优化前和优化后对数据库的读写情况,往往优化后的共同特征就是让SQL能够尽量的少读数据库和少写数据库。

先列这10条,欢迎大家补充。

-- The End --

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/519536/viewspace-613944/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE 总监,阿里云MVP,北京大学理学硕士,恩墨学院创始人,教育专家,中国区 Cloudera 首位官方授权大数据讲师,金牌培训专家,BDA大数据联盟创始人,OCM联盟创始人,ACCUG创始人、ACOUG核心专家,Blogger。

注册时间:2008-03-16

  • 博文量
    797
  • 访问量
    7977134