记录一次SQL优化,增加索引,随便写的当笔记了
生活随笔
收集整理的這篇文章主要介紹了
记录一次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字段
總結
以上是生活随笔為你收集整理的记录一次SQL优化,增加索引,随便写的当笔记了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《雷神4:爱与雷霆》全新剧照 肌肉猛男索
- 下一篇: codesys raspberry pi