一则join查询SQL优化案例

线上一个实例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执行计划:


企业微信截图_15686268703016.png

可以看到 cAssociationMiningRule 表走的是全表扫描,虽然扫描行数不是很多,才一万多行。但是如果并发一上来的话(这里并发在几十个到上百个),其实就会对性能产生很大的影响。优化思路是解决全表扫描,走索引扫描。

给outputPeriod字段outputDimGroupId 字段添加索引,看看哪个字段区分度比较大,选择区分度大的字段添加:
alter table cAssociationMiningRule add index idx_assoc_rule_outputdim (outputDimGroupId);

aaa.png

现在看,执行计划扫描行数很小,SQL已经跑得很快了!!!

你可能感兴趣的:(一则join查询SQL优化案例)