一.数据库设计优化
1.数据库表的规范化和反规范化设计:在性能需求下,必要时可以进行反规范化的设计,减少表连接操作。
2.设计合适的字段数据类型:为字段选择合适数据类型,减少存储空间和提高查询效率。
3.索引设计:为频繁查询的字段创建适当的索引,但是避免索引过多,占用存储空间和影响写操作性能。
二.查询优化
1.避免select *,明确查询中所指定的列名,减少查询中列的数据
2.谓词下推,提前使用where过滤掉无用数据。
3.减少子查询,可以使用join连接代替子查询,因为在子查询过程中会创建临时表严重影响性能。注意:在hive,spark等分布式操作中,大部分join都会导致shuffle操作,
4.尽量避免使用低效率函数,如使用group by 去替代count(distinct()),使用in去替代or。
5.小表驱动大表进行join操作。
三.索引优化
1.分析索引使用情况:使用explain检查查询计划,判断是否需要修改语法,或者创建删除索引
2.覆盖索引:选择性创建覆盖索引,使查询可以直接从索引中获取数据
sql的优化基本就是上面三个部分,可以针对以上三部分进行更细致的描述,比如索引优化中针对分析索引使用情况,使用最左前缀匹配进行改进;或者根据业务需求考虑是否使用性能更好的union all去替代union函数等等。