索引如何影響 DISTINCT 排序
在 Go 語言中,使用 GORM 框架對數據庫進行操作時,如果對查詢結果執行 Distinct() 操作,再不指定 ORDER BY 條件的情況下,排序規則會受到索引的影響。
問題:
以一個行政區劃表的例子為例,假設有 Province、Prefecture 和 County 三個字段,其中 Province 加了索引。當不啟用索引時,Distinct() 操作后的結果會按照主鍵排序。但是,當 Province 上啟用索引后,排序規則會發生變化。
答案:
sql 標準沒有定義未指定 ORDER BY 時的確切排序順序,因此由數據庫系統和底層存儲引擎決定。以 mysql 中常用的 InnoDB 存儲引擎為例:
- 當沒有匹配的二級索引時,MySQL 會使用主鍵索引,因此結果會按照主鍵排序。
- 當使用二級索引時,結果會按照二級索引的順序排序。
在上述行政區劃表中,當 Province 上啟用索引時,Distinct() 操作后,結果會按照 Province 索引的順序進行排序,而不是主鍵順序。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END