优化order by语句
生活随笔
收集整理的這篇文章主要介紹了
优化order by语句
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
-
mysql可以通過查看sql執(zhí)行計劃知道其排序方式有兩種 using filesort 和 using index
- 第一種是通過對返回數(shù)據(jù)進行排序,也就是通常說的filesort排序,所有不是通過索引直接返回排序結(jié)果的排序都叫filesort排序
- 第二種通過有序索引順序掃描直接返回有序數(shù)據(jù)。不需要額外排序,操作效率很高。
-
對于單字段排序
推薦查詢字段都有對應索引。
- 多字段排序
要求排序字段要么都升序,要么都降序,且排序字段是創(chuàng)建了復合索引(并且排序字段是按照創(chuàng)建索引字段的順序來的)
- 有時候using filesort排序不能避免,我們可以優(yōu)化此種排序方法
在MySQL中,using filesort排序算法分為兩種,一是兩次掃描算法,二是一次掃描算法,第二種會節(jié)省很多IO操作,效率更快。決定使用哪種算法是通過mysql系統(tǒng)變量max_length_for_sort_data來決定的,當所有返回字段的最大長度小于這個變量值時,MySQL就會選擇第二種算法,反之使用第一種。所以,如果有充足的內(nèi)存讓MySQL存放須要返回的非排序字段,就可以加大這個參數(shù)的值來讓MySQL選擇第二種排序算法。當內(nèi)存不是很充裕時,不能簡單地通過強行加大上面的變量來強迫MySQL去使用高效算法,否則可能會造成MySQL不得不將數(shù)據(jù)分成很多段,然后進行排序,這樣可能會得不償失,此時就須要去掉不必要的返回字段,讓返回結(jié)果長度適應max_length_for_sort_data變量的限制。
總結(jié)
以上是生活随笔為你收集整理的优化order by语句的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 优化以insert语句导入数据的方式
- 下一篇: group by 语句优化