如何写出高性能的SQL语句

2022年3月17日 25点热度 0人点赞

优化sql语句

方法/步骤

  • 统一SQL语句的写法

      对于以下两句SQL语句,程序员认为是相同的,数据库查询优化器认为是不同的。

      select * from dual

      select * From dual

      其实就是大小写不同,查询分析器就认为是两句不同的SQL语句,必须进行两次解析。生成2个执行计划。

      所以作为程序员,应该保证相同的查询语句在任何地方都一致,多一个空格都不行!

  • Select子句中避免使用‘*‘

     

    Oracle在解析的过程中,会将'*'依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间

  • 避免在索引列上使用函数或计算,在where字句中,如果索引是函数的一部分,优化器将不再使用索引,将使用全表扫描;例如:

    select * from table where hh*10>1000;//低效
    select * from table where hh>1000/10;//更高效

  • 尽量避免在索引列上使用not,!=和<>,索引只能告诉什么在表中,而不能告诉什么不在表中,当数据库遇上以上几种符号时,将不再使用索引,使用全表扫描

  • 使用like进行模糊查询时应注意,有的时候会需要进行一些模糊查询比如

      select * from contact where username like ‘%yue%’

      关键词%yue%,由于yue前面用到了“%”,因此该查询必然走全表扫描,除非必要,否则不要在关键词前加%,

  • 不要把SQL语句写得太复杂

      一般,将一个Select语句的结果作为子集,然后从该子集中再进行查询,这种一层嵌套语句还是比较常见的,但是根据经验,超过3层嵌套,查询优化器就很容易给出错误的执行计划。因为它被绕晕了。像这种类似人工智能的东西,终究比人的分辨力要差些,如果人都看晕了,我可以保证数据库也会晕的。

  • oracle采用自下而上的顺序解析where字句,所以表之间的链接必须写在其他where条件之前,那些可以滤过大量纪录的条件必须写在where字句的末尾

  • sql语句用大写的;因为oracle总是先解析sql语句,把小写的字母转换成大写的再执行

    END
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部

laozhao

这个人很懒,什么都没留下

文章评论