一则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已经跑得很快了!!!

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 4,532评论 0 9
  • 一、MySQL优化 MySQL优化从哪些方面入手: (1)存储层(数据) 构建良好的数据结构。可以大大的提升我们S...
    宠辱不惊丶岁月静好阅读 2,161评论 1 8
  • 写在开头 这里所说的劣质SQL限定在数据量未到分库分表和使用分布式缓存程度,指那些执行较差的查询、插入、更新、删除...
    alivs阅读 572评论 0 0
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 4,620评论 0 30
  • 人生如梦,岁月无情。无论是珍惜或浪费,时间都会像白驹过隙忽然而己。 少年不识愁滋味,人到中年万事休。中...
    四海_25e4阅读 830评论 0 6