1,统一SQL语句的写法
select * from dual
select * From dual
其实就是大小写不同,查询分析器就认为是两句不同的SQL语句,必须进行两次解析。生成2个执行计划。所以作为程序员,应该保证相同的查询语句在任何地方都一致,多一个空格都不行!
2,不要把SQL语句写得太复杂
超过3层嵌套,查询优化器就很容易给出错误的执行计划
另外,执行计划是可以被重用的,越简单的SQL语句被重用的可能性越高。而复杂的SQL语句只要有一个字符发生变化就必须重新解析,然后再把这一大堆垃圾塞在内存里。可想而知,数据库的效率会何等低下。
3,使用“临时表”暂存中间结果
简化SQL语句的重要方法就是采用临时表暂存中间结果,但是,临时表的好处远远不止这些,将临时结果暂存在临时表,
后面的查询就在tempdb中了,这可以避免程序中多次扫描主表,也大大减少了程序执行中“共享锁”阻塞“更新锁”,减少了阻塞,提高了并发性能。
4,使用like进行模糊查询时应注意
select * from contact where username like ‘%yue%’
关键词%yue%,由于yue前面用到了“%”,因此该查询必然走全表扫描,除非必要,否则不要在关键词前加%,
5,WHERE子句中的连接顺序
ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其它WHERE条件之前,
那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.
6, 选择最有效率的表名顺序
FROM子句中写在最后的表(基础表 driving table)将被最先处理
在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表。
7, 注意UNion和UNion all 的区别。
UNION all好,union 去重 union all 不去重
8. 注意使用DISTINCT
在没有必要时不要用,它同UNION一样会使查询变慢。重复的记录在查询里是没有问题的
9,注意Select COUNT(*)
Select COUNT(*)的效率教低,尽量变通他的写法,而EXISTS快.同时请注意区别: select count(Field of null) from Table 和 select count(Field of NOT null) from Table 的返回值是不同的!!!
10,如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中以提高性能(即使它们之间没有关系)
END
SQL 语句的注意
最新推荐文章于 2019-11-08 08:20:04 发布