Mysql數據庫sql優化

最近項目開發遇到sql比較複雜,多表鏈接嵌套查詢,作了不少優化。分享一下我調優的經驗:sql

一、嵌套查詢儘可能減小內層查詢的結果數

嵌套查詢能在內層作統計或者聚合多儘可能就在內層作聚合,若是內層聚合之後外層仍要聚合,內層多聚合也要作。不要爲了方便只在外層作聚合,內層結果數對查詢效率影響很大。優化

看下面對兩條sql:第一條sql對內層u.travel_id作了聚合,第二條沒有在內層作聚合,查詢時間相差一倍:
1.第一條sql執行結果,時間50ms:
圖片描述spa

2.第二條sql執行結果,時間108ms
圖片描述3d

二、MySQL查詢In對索引支持很差,只支持常量不支持變量

*也就是說若是columnName建了索引,
這樣查詢索引能夠生效columnName in ('value1','value2'...)也這樣用能夠,
這樣查詢索引不能生效 columnName in ( select values from ...)。*
看下面的兩條sql的執行計劃,dest_id是主鍵:
一、這條sql索引生效
圖片描述
二、這條沒有生效
圖片描述blog

三、對於值不多的字段不要建索引

對於值不多的字段建索引做用不大*,因爲經過索引字段篩選以後仍可能有不少記錄須要篩選,看下圖表dest的abroad字段只有兩個值:
圖片描述
一、對abroad不建索引查詢:
圖片描述
圖片描述索引

二、對abroad建索引查詢,反而更慢:
圖片描述
圖片描述圖片

總結: 對於sql調優須要對各類方案都執行看具體執行時間,才能判斷優劣,還要考慮到有些表數據是一直增加到,已經調好到sql能不能適應數據增加很重要,有些sql調優方案在數據量不大到狀況下可能不如另一種方案,可是數據量增加之後可能就不同了。開發

相關文章
相關標籤/搜索