本篇文章讲一下优化SQL的几种方法形式,如下可见:
①:选择最有效的表名顺序。
例如:TABLE1 有1000条数据,TABLE2只有1条数据,那么就是选择数据量小的表作为SQL的基础表。
②:WHERE字句中的连接顺序
因为Oracle的解析按照自上而下解析,因此表之前的连接必须写在where条件之前。
例:
低效:SLECT ... FROM EMP E WHERE SAL > 5000 AND JOB = 'manager' and 25 < (SELECT COUNT(*) FROM EMP WHERE MGR = E.EMPNO);
高效:SLECT ... FROM EMP E WHERE 25 < (SELECT COUNT(*) FROM EMP WHERE MGR = E.EMPNO) AND SAL > 5000 AND JOB = 'manager' ;
③:通配符的使用
如果SQL在执行带通配符的语句时,如果' % '在首位,那么字段建立的主键或者索引将失效。应避免这种语句的出现。
④:用WHERE字句代替HAVING字句
HAVING是对检索出来的结果集再次进行检索,如果通过WHERE去限制则可减少该方面的开销。
⑤:增加索引
索引是一个表的概念部分,用来提高检索数据的效率。但是索引需要额外的存储空间, 那些不必要的索引反而会是SQL的查询时间变长,所以索引不宜过多,还需要定期重构。
⑥:避免在索引列上使用计算
WHERE子句中,如果索引是函数的一部分,优化器将不使用索引而使用全表扫描。
⑦:用 IN 代替 OR
⑧:避免使用耗费资源的操作
带有DISTINCT、UNION、MINUS、INTERSECT、ORDER BY的SQL语句会启动SQL引擎执行耗费资源的排序(SORT)功能,DISTINCT需要执行一次,而其他至少需要执行两次。