1概念
在实际项目中,为实现相同的目标,数据库运行效率可能会差距很大,甚至数据库宕机。为了解决这些问题,开发人员及DBA在保证数据质量的前提下,针对表、代码、程序及数据库等各个方面,进行的以提高效率为目的调试操作,即为优化。
2优化方向
1SQL代码优化 |
2表结构优化:分区表、索引(合理设置)、去除没必要的约束、去除没必要的字段、当前数据与历史数据分开存放(ODS层) |
3程序逻辑优化:将复杂的大的步骤拆成简化的小的多个步骤(加中间表或临时表) |
4数据库参数优化 |
5服务器硬件优化 |
3具体措施
1具体字段代替select*的* |
2能用where筛选的不用having(where先运行可以减少后面操作的数据量) |
3(not)exists代替(not)in,(伪:exists后的子查询查到一条就可在主查询中继续,in是将子查询所有数据查完才继续) |
4in代替or |
5表连接代替子查询 |
1避免在索引列中使用计算、函数、NOT、null、或发生隐式转换(否则索引失效) |
2使用>=(<=)来代替>(<),(>或<不走索引) |
3用>和<来代替<>,(不等于号<>不走索引) |
4instr代替like,(%放在前面的时候如“%jian”一般不走索引) |
5复合索引,在筛选时至少要引用到个索引列(否则索引失效) |
4查看效率
在PL/SQL Developer中按F5查看执行计划和查询效率如上图
解读:
自右往左:列靠右的是先执行的,如“INDEX UNIQUE SCAN”
自上往下:都靠右的情况下,上面的比下面的先执行
INDEX UNIQUE SCAN:索引扫描
TABLE ACCESS FULL:全表扫描
耗费:指对CPU和IO(磁盘IO读写)的占用