线上一个实例SQL语句如下:
SELECT dimGroupId, periodType, statType,isStorage, default
FROM cAssociationMiningRule
r JOIN cStorageConf s ON s.dimGroupId = r.outputDimGroupId AND s.periodType = r.outputPeriod WHERE isStorage>0 AND dimGroupId='2975'
explain执行计划:
![](https://img.haomeiwen.com/i6257082/e5d538696ab1fbc7.png)
可以看到 cAssociationMiningRule 表走的是全表扫描,虽然扫描行数不是很多,才一万多行。但是如果并发一上来的话(这里并发在几十个到上百个),其实就会对性能产生很大的影响。优化思路是解决全表扫描,走索引扫描。
给outputPeriod字段outputDimGroupId 字段添加索引,看看哪个字段区分度比较大,选择区分度大的字段添加:
alter table cAssociationMiningRule add index idx_assoc_rule_outputdim
(outputDimGroupId
);
![](https://img.haomeiwen.com/i6257082/ed07496f6024c6fb.png)
现在看,执行计划扫描行数很小,SQL已经跑得很快了!!!
网友评论