SQL 语句优化技术分析
最近几周一直在进行数据库培训,老师精湛的技术和生动的讲解使我受益匪浅。为了让更
多的新手受益,我抽空把 SQL 语句优化部分进行了整理,希望大家一起进步。
一、操作符优化
1、IN 操作符
用 IN 写出来的 SQL 的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。但
是用 IN 的 SQL 性能总是比较低的,从 Oracle 执行的步骤来分析用 IN 的 SQL 与不用 IN 的
SQL 有以下区别:
ORACLE 试图将其转换成多个表的连接,如果转换不成功则先执行 IN 里面的子查询,再查
询外层的表记录,如果转换成功则直接采用多个表的连接方式查询。由此可见用 IN 的 SQL
至少多了一个转换的过程。一般的 SQL 都可以转换成功,但对于含有分组统计等方面的
SQL 就不能转换了。
推荐方案:在业务密集的 SQL 当中尽量不采用 IN 操作符,用 EXISTS 方案代替。
2、NOT IN 操作符
此操作是强列不推荐使用的,因为它不能应用表的索引。
推荐方案:用 NOT EXISTS 方案代替
3、IS NULL 或 IS NOT NULL 操作(判断字段是否为空)
判断字段是否为空一般是不会应用索引的,因为索引是不索引空值的。
推荐方案:用其它相同功能的操作运算代替,如:a is not null 改为 a>0 或 a>’’等。不允许
字段为空,而用一个缺省值代替空值,如申请中状态字段不允许为空,缺省为申请。
4、> 及 < 操作符(大于或小于操作符)
大于或小于操作符一般情况下是不用调整的,因为它有索引就会采用索引查找,但有的情
况下可以对它进行优化,如一个表有 100 万记录,一个数值型字段 A ,30 万记录的
A=0,30 万记录的 A=1,39 万记录的 A=2,1 万记录的 A=3。那么执行 A>2 与 A>=3 的效果就
有很大的区别了,因为 A>2 时 ORACLE 会先找出为 2 的记录索引再进行比较,而 A>=3 时
ORACLE 则直接找到=3 的记录索引。
5、LIKE 操作符
LIKE 操作符可以应用通配符查询,里面的通配符组合可能达到几乎是任意的查询,但是如