数据库调优
作者:互联网
一、Oracle数据库
- 表空间:将普通表、事件表、日志表、图像表、索引等放入不同的表空间
- 添加分区-对表按年或月进行分区
- 添加索引
- 物化视图
- 并行查询
二、PostgreSQL优化
2.1 ANALYZE
周期性地运行 ANALYZE,或者在对表的大部分内容做了更改之后马上运行它是个好习惯,准确的统计信息将帮助规划器选择最合适的查询规划,并因此而改善查询处理的速度。
一种比较经常采用的策略是每天在低负荷的时候运行一次 VACUUM 和 ANALYZE。
三、表优化
- 垂直切分-分库
- 水平切分-分表
- 分区
- 中间表
- 数据库至少达到第三范式或BCNF范式。
- 去除冗余列和衍生列。
- 反规范化设计-合理增加冗余字段,提升查询效率。
- 预留字段
四、索引优化
- 对频繁作为查询条件的列添加索引。
- 避免对经常更新的表添加过多的索引。
- 数据量小的表最好不要使用索引。
- 在条件表达式中经常用到的不同值较多的列上建立索引,在不同值很少的列上不要建立索引。
- 当唯一性是某种数据本身的特征时,指定唯一索引。
- 对频繁进行排序或分组的列上建立索引,如果待排序的列有多个,则可以建立组合索引。
- 规则索引-对主键按业务规则进行设计,而不是使用uuid。
五、SQL调优
5.1 GROUP BY优化
在GROUP BY分组之前先在WHERE子句中过滤掉不必要的数据。
5.2 UNION ALL和UNION优化
UNION ALL和UNION UNION ALL的执行效率比UNION高。
5.3 INSERT优化
使用INSERT语句一次插入多条记录比使用多条INSERT语句执行效率高。
5.4 TRUNCATE优化
TRUNCATE的执行效率比DELETE高。
5.5 IN优化
在IN子句中把命中率高的项放到最前面。
5.5.1 IN和OR对比
IN执行效率比OR高。
5.5.2 IN和EXISTS对比
- IN适合于外表大而内表小的情况 走的是外表的索引。
- EXISTS适合于外表小而内表大的情况 走的是内表的索引。
5.6 NOT EXISTS和NOT IN对比
- NOT EXISTS任何时候都比NOT IN要快。
- 因为如果查询语句使用了NOT IN,那么内外表都进行全表扫描,没有用到索引; 而NOT EXTSTS的子查询依然能用到表上的索引。所以无论那个表大,用NOT EXISTS 都比NOT IN 要快。
标签:EXISTS,UNION,数据库,列上,查询,索引,调优,优化 来源: https://blog.csdn.net/sa19861211/article/details/90743781