多语言展示
当前在线:1146今日阅读:172今日分享:19

如何写出高性能的SQL语句

优化sql语句
方法/步骤
1

统一SQL语句的写法  对于以下两句SQL语句,程序员认为是相同的,数据库查询优化器认为是不同的。  select * from dual  select * From dual  其实就是大小写不同,查询分析器就认为是两句不同的SQL语句,必须进行两次解析。生成2个执行计划。  所以作为程序员,应该保证相同的查询语句在任何地方都一致,多一个空格都不行!

2

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

3

避免在索引列上使用函数或计算,在where字句中,如果索引是函数的一部分,优化器将不再使用索引,将使用全表扫描;例如:select * from table where hh*10>1000;//低效 select * from table where hh>1000/10;//更高效

4

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

5

使用like进行模糊查询时应注意,有的时候会需要进行一些模糊查询比如  select * from contact where username like ‘%yue%’  关键词%yue%,由于yue前面用到了“%”,因此该查询必然走全表扫描,除非必要,否则不要在关键词前加%,

6

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

7

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

8

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

推荐信息