您的位置:首页 > 数据库

SQL优化个人总结

2012-06-19 16:57 337 查看
1. 避免复杂的多表关联

2. 避免使用select *

3. 避免使用耗费资源的操作:带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL

可以:

用EXISTS替换DISTINCT
用UNION-ALL
替换UNION ( if possible)

4. 如果索引是建立在多个列上,
只有在它的第一个列(leading
column)被where子句引用时,优化器才会选择使用该索引.

5. 避免在索引列上使用函数,SAL> 25000/12优于SAL * 12 > 25000

6. 避免使用前置通配符.如LIKE '%109204421';

7. 避免在索引列上使用NOT.如DEPT_CODE > 0优于DEPT_CODE NOT = 0

8. 在索引列上使用 IS NULL和IS NOT NULL是不允许使用索引的。

9. 避免出现索引列自动转换. 如 TO_NUMBER(USER_NO) = 109204421

10. WHERE子句中的连接顺序.
ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,
当在WHERE子句中有多个表联接时,WHERE子句中排

在最后的表应当是返回行数可能最少的表,有过滤条件的子句应放在WHERE子句中的最后。

11. 任何在Order by语句的非索引项或者有计算表达式都将降低查询速度。解决这个问题的办法就是重写order by语句以使用索引,也可以为所使用的列建立

另外一个索引,同时应绝对避免在order by子句中使用表达式。

12. 避免使用HAVING子句, HAVING
只会在检索出所有记录之后才对结果集进行过滤.
这个处理需要排序,总计等操作.
如果能通过WHERE子句限

制记录的数目,那就能减少这方面的开销.

13. 用NOT EXISTS
替代 NOT IN

14. 用>= 替代
>

15. 通过使用>=、<=等,避免使用NOT命令. 如
salary<3000 or salary>3000优于salary <> 3000

16.
尽量多使用COMMIT.事务是消耗资源的,大事务还容易引起死锁

17. 用TRUNCATE替代DELETE
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: