SQL优化个人总结

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 NULLIS 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

 

你可能感兴趣的:(oracle,sql,优化,user,null,delete)