Oracle SQL性能优化总结
Oracle数据库技术的两大基石是:索引和表连接
1.能不写子查询,尽量不写子查询,而是直接编写多表连接操作
2.到底是使用in还是exists:
in操作的原理是先进行子查询操作,再进行主查询操作;exists操作的原理是先进行主查询操作,再到子查询中进行过滤。
Oracle里面只要该技术依然存在,就说明他一定有应用场景,否则就该直接淘汰了。in和exists依然存在,说明他们一定有不同的应用场景,in和exists使用的一般性建议:
(1)如果限制性强的条件在子查询,则使用in操作
(2)如果限制性强的条件在主查询,则使用exists操作
3.尽量将限制性最强的表作为驱动表
4.如果两个结果集之间根本没有交集,当然使用UNION ALL而不是UNION
导致数据库性能问题的最常见的两类原因:
(1)不合理的大表全表扫描
在IT系统中,大量质量低下的SQL语句,特别是大量不合理的大表全表扫描是导致性能问题的首要因素。导致该问题的根本原因包括缺乏索引、索引被抑止、表连接技术使用不当、表连接和索引结合不好、优化器问题、统计信息未及时采集和更新、数据库设计问题、事务设计不合理等诸多因素。
(2)语句共享性不好
在联机交易系统中,由于应用程序没有合理使用绑定变量,导致大量重复的语句解析(Parse)操作,浪费了大量内存空间(shared pool),使CPU利用率居高不下,更导致系统整体扩展能力下降,影响了系统整体生命周期。