MySQL数据库order by 奇慢无比
生活随笔
收集整理的這篇文章主要介紹了
MySQL数据库order by 奇慢无比
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
今天遇到個奇葩的問題,
sql 數(shù)據(jù)量很大 有where 和order by,不加order by 速度很快,加了就很慢
?
一、首先我們對這條sql執(zhí)行查詢計劃:
explain select t.order_id from book_order t ORDER BY t.order_id desc?
?
explain select t.order_id from book_order t?
?
?
?
這條語句應(yīng)用的索引是idx_bo_order_book_local
?
?
進(jìn)一步確定,再對使用where條件后,索引變成了主鍵。
explain select t.order_id from book_order t where t.order_id = 1593539?
?
通過以上的情況可以看出:
MySQL默認(rèn)的查詢(沒有where條件),不一定使用主鍵,由于MySQL的每一條簡單查詢只應(yīng)用一個索引,所以,這個時候使用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每天一條簡單語句只應(yīng)用一個索引,所以order by的字段要在索引之中,并且和where條件可以合并成組合索引。
?
2、select的字段,必須是索引字段。(主鍵查詢除外)
?
3、如果sql語句為復(fù)合語句,包含子查詢等,可以把語句分解成簡單查詢來分析。
?
轉(zhuǎn)載于:https://www.cnblogs.com/yizhiamumu/p/9004550.html
總結(jié)
以上是生活随笔為你收集整理的MySQL数据库order by 奇慢无比的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 博客文章排版学习
- 下一篇: redis和memcached相比的独特