今天在這裏用最簡單粗暴的實例方式的方法來驗證下這個讓同志們抓不着節奏的 order by 和 索引之間的關係測試
條件:1300w 條數據(呃,公司測試數據而已,不要在乎)spa
order by 中的全部字段都包含索引索引
主鍵 : idit
索引 :capture_time capture_time_id file
1:查詢字段不包含 order by 字段select
結果:不使用索引 還特麼上了 filesort 卡死你丫的分頁
2:查詢字段包含 order by 字段 + 其餘字段方法
結果:不使用索引im
3:查詢字段只包含 order by 字段數據
索引生效
4:where 字段不包含 order by 字段
5:where 字段包含 order by 字段
6:where 字段只包含 order by 字段
因此 where 查詢只是能輔助而已 並不能真正避免 filesort
7:附加 limit 查詢
我已經實例不下去了:
一、若 select 字段集中包含 order by 字段集中之外的字段,則 order by 不使用索引
二、若 select 字段集與 order by 字段集一致(順序無礙),則 order by 使用索引(固然要存在符合此字段集順序的組合索引)
三、where 條件只是能在 Extra 中輔助做用而已
四、若添加 limit 查詢則 order by 會使用索引, 不管 select 的字段集與 order by 是否一致(我以爲這個最有用,一般狀況下咱們很難保證select 字段集 和 order by 字段集對等的關係,而使用 limit 附加查詢則可激活 order by 中最左匹配原則下的索引),再說了分頁查詢很是普及
今天被戰勝了,若是數據量很大的話,好比 order by id limit 1000000000,10 id的索引也不會被啓用的,哎,你們仍是多多的explain吧,開啓 slow_query_log 什麼的