mysql中聯合索引排序的問題

背景

在test數據庫中,查詢一組數據會根據id進行排序,而同樣的條件在pre數據庫中查詢卻沒有根據默認的id主鍵來排序,於是激起了好奇心。

 

情況

正常情況下,在默認沒有寫order by條件的情況下,查詢出來的結果會根據id主鍵從小到大的排序,例如在測試環境中會有:

但是在pre數據庫中,則有:

分析

到底是什麼原因導致了沒有根據id來排序呢?第一點想到的一定是與表結構定義有關,左側是test的表定義,右側是pre的表定義

可以看到,兩個表的只有索引不一樣,在test數據庫下,走的是INDEX_PLAN_ID的索引,而在pre數據庫下,走的是聯合索引idx_teach_plan_question,可能排序就與索引有關

 

驗證

test數據庫sql解釋

pre數據庫sql解釋

發現查詢條件走的索引和分析的一致。

另外當我們刪除掉test數據庫中該表的INDEX_PLAN_ID索引後,也會出現id亂序的情況,從另一個方面也驗證了根據聯合索引的排序。

 

結論

若查詢條件中沒有走索引,或者是走的普通索引,結果都會按照id主鍵從小到大排序

若查詢條件走聯合索引,則結果會按照聯合索引的從左到右的字段先後順序排序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章