Mysql之order by|group by 排序最佳化

來源:互聯網
上載者:User

標籤:超出   取資料   分享圖片   技術   HERE   掃描   指標   順序   SQ   

order By 關鍵字最佳化1.盡量使用index方式排序,避免使用Filesort方式排序。2.Mysql支援兩種排序方式,Filesort和Index,Index效率高,它指Mysql掃描索引本身完成排序。FileSort排序方式效率低。
order by滿足兩種情況,會使用index排序1.order by 語句使用索引最左前列2.使用where子句和order By子句條件滿足索引最左前列。
如果不在索引列上,filesort有兩種演算法:Mysql就要啟動雙路排序和單路排序Mysql4.1之前使用雙路排序,字面意思就是兩次掃描磁碟,最終得到資料,讀取行指標和orderby列,對他們進行排序。然後掃描已經排好序的列表,按照列表中的值重新從列表中讀取對應的資料。單路排序:從磁碟讀取要查詢的列,按照order by列在buffer對他們進行排序,然後掃描排序後的列表進行輸出,它的效率更快一些,避免了第二次讀取資料。並且把隨機IO變成了順序IO,但是他會使用更多的空間,因為他把每一行都儲存在記憶體中了。單路查詢問題:在sort_buffer中,在使用單路查詢時,因為要把所有欄位都取出,所以有可能取出的資料的總大小超出了sort_buffer的容量,導致每次只能去sort_buffer容量大小的資料,進行排序,排完在取出sort_buffer容量大小,造成多次I/O。
最佳化策略:增大sort_buffer_size參數的設定增大max_length_forsort_data參數的設定

group by 實質是先排序後進行分組,遵照索引建的最佳左首碼。當無法使用索引列增大sort_buffer_size參數的設定和max_length_forsort_data參數的設定Where高於having,能寫在where限定的條件就不要去having限定了。

 

Mysql之order by|group by 排序最佳化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.