mysql file sort

來源:互聯網
上載者:User

,利用有序索引擷取有序資料顯示Using index。而檔案排序顯示Using filesort。

。而檔案排序顯示Using filesort。

         注意:MySQL在查詢時最多隻能使用一個索引。因此,如果WHERE條件已經佔用了索引,那麼在排序中就不使用索引了。

1)  返回選擇的欄位,即只包括在有選擇的此列上(),不一定適應*的情況):

 |

|

2)  只有當ORDER BY中所有的列必須包含在相同的索引,並且索引的順序和order by子句中的順序完全一致,並且所有列的排序方向(升序或者降序)一樣才有,(混合使用ASC模式和DESC模式則不使用索引)

|

Using where;

3)     where 語句與ORDER BY語句組合滿足最左首碼:

 |

4)     如果查詢聯結了多個表,只有在order by子句的所有列引用的是第一個表的列才可以。


 order by  inventid;

Usingfilesort|

             

sort_buffer_size 系統變數所設定的排序區。這個排序區是每個Thread 獨享的,所以說可能在同一時刻在MySQL 中可能存在多個 sort buffer 記憶體地區。

雙路排序:是首先根據相應的條件取出相應的排序欄位和可以直接定位行資料的行指標資訊,然後在sort buffer 中進行排序。

單路排序:是一次性取出滿足條件行的所有欄位,然後在sort buffer中進行排序。

主要目的是為了減少第一次演算法中需要兩次訪問表資料的 IO 操作,將兩次變成了一次,但相應也會耗用更多的sortbuffer 空間。當然,MySQL4.1開始的以後所有版本同時也支援第一種演算法,

MySQL主要通過比較我們所設定的系統參數 max_length_for_sort_data的大小和Query 語句所取出的欄位類型大小總和來判定需要使用哪一種排序演算法。如果 max_length_for_sort_data更大,則使用第二種最佳化後的演算法,反之使用第一種演算法。所以如果希望 ORDER BY 操作的效率儘可能的高,一定要主義max_length_for_sort_data 參數的設定。曾經就有同事的資料庫出現大量的排序等待,造成系統負載很高,而且回應時間變得很長,最後查出正是因為MySQL 使用了傳統的第一種排序演算法而導致,在加大了max_length_for_sort_data 參數值之後,系統負載馬上得到了大的緩解,響應也快了很多。

1. 加大 max_length_for_sort_data 參數的設定

2. 去掉不必要的返回欄位

3. 增大 sort_buffer_size 參數設定


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.