
索引對 DISTINCT 排序的影響
在不指定排序條件時,sql 標準允許數據庫系統根據底層存儲引擎來決定排序順序。
在 mysql 中,默認使用 InnoDB 存儲引擎,其采用 B+ 樹結構索引。不指定排序字段時,InnoDB 會基于查詢所用的索引進行排序。
當不匹配任何二級索引,使用主鍵索引時,排序將按照主鍵順序進行。
然而,如果加入了二級索引(如本文中給 Province 字段添加索引),InnoDB 將優先使用該索引,從而導致排序結果按照二級索引的順序進行。這是因為,在 B+ 樹結構中,從左到右依次取值,查詢會先從該二級索引中獲取數據,進而影響最終排序結果。