记录一次SQL优化,增加索引,随便写的当笔记了

写了一个SQL,前端往返时间大约1.7秒,最终优化到一共150毫秒左右,应该还可以更好一些

下面说的有点乱,有空再好好总结一下吧。参考文章里面写的还是比较好的,只不过没有组合查询。

参考链接:https://zhuanlan.zhihu.com/p/47313236

sql的一部分:把表名去掉了

explain query plan
select codes,value,unit,starttime,endtime,quality from (
-- explain query plan
select ifNull(p.code,'00')||'-'||ifNull(pu.code,'00')||'-'||ifNull(eq.code,'00')||ifNull(e.code,'00')||'-'||ifNull(c.pclass,'00')||ifNull(c.code,'00')||'-'||ifNull(u.code,'00') codes, d.value value,d.unit unit,t.starttime starttime,t.endtime endtime,d.quality from d
left join p on d.processid = p.id
left join pu on d.processunitid = pu.id
left join e on d.equipmentid = e.id
left join eq on e.parentid = eq.id
left join c on d.collectItemid = c.UUID
left join t on d.timerangeid = t.id
left join u on d.usageid = u.id where 1=1
) RetureData order by starttime desc;

这是执行计划,Data表还是不能做到不全表扫描,但是会走索引的,一开始没加索引不走索引很慢,如果不全表扫描的话可能是要在where中添加使用索引里的条件

首先学到的知识是:走不走索引看的是where后的条件,select里如果有索引外的字段则需要回表,也就是Using Index,不回表显示的是USING COVERING INDEX,最后那句话是生成了一个临时表进行排序会变慢,我没有想到怎么加索引能去掉,试了好几个都不行,而且我加了starttime 的索引。
在这里插入图片描述
where中是and的话索引就与索引创建的顺序没关系,如果是or的话就应该需要多个索引,最佳作前缀原则,不然会导致索引失效。order by 的字段,先按where来过滤数据,在将数据排序,所以需要组合所有 where字段+order by字段

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值