MySQL資料庫order by 奇慢無比

來源:互聯網
上載者:User

標籤:mys   通過   xpl   pre   分析   cal   情況   info   主鍵   

今天遇到個奇葩的問題,

sql 資料量很大 有where 和order by,不加order by 速度很快,加了就很慢

 

一、首先我們對這條sql執行查詢計劃:
 explain select t.order_id from book_order t  ORDER BY t.order_id desc 

 

 

explain select t.order_id from book_order t 

 

 

 

 

這條語句應用的索引是idx_bo_order_book_local

 

 

進一步確定,再對使用where條件後,索引變成了主鍵。

explain select t.order_id from book_order t where t.order_id = 1593539

 

 

通過以上的情況可以看出:

MySQL預設的查詢(沒有where條件),不一定使用主鍵,由於MySQL的每一條簡單查詢只應用一個索引,所以,這個時候使用order by 主鍵,主鍵的索引功能失效。

 

二:解決辦法

1、order by 索引(where條件中引用的索引)。

2、強制使用主鍵:FORCE INDEX(PRI),如果想強制使用索引,則用FORCE INDEX(索引名)。

 explain select t.order_id from book_order t FORCE INDEX(idx_bo_order_book_local) ORDER BY t.order_id desc;

 

 三、其他order by 索引失效的原因分析

 

1、MySQL每天一條簡單語句只應用一個索引,所以order by的欄位要在索引之中,並且和where條件可以合并成複合式索引。

 

2、select的欄位,必須是索引欄位。(主鍵查詢除外)

 

3、如果sql語句為複合陳述式,包含子查詢等,可以把語句分解成簡單查詢來分析。

 

MySQL資料庫order 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.