MySQL數據庫order by 奇慢無比


今天遇到個奇葩的問題,

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語句為復合語句,包含子查詢等,可以把語句分解成簡單查詢來分析。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM