Go 中 GORM 的 Distinct() 操作:索引如何影響結果的排序?

Go 中 GORM 的 Distinct() 操作:索引如何影響結果的排序?

索引如何影響 DISTINCT 排序

在 Go 語言中,使用 GORM 框架對數據庫進行操作時,如果對查詢結果執行 Distinct() 操作,再不指定 ORDER BY 條件的情況下,排序規則會受到索引的影響。

問題:

以一個行政區劃表的例子為例,假設有 Province、Prefecture 和 County 三個字段,其中 Province 加了索引。當不啟用索引時,Distinct() 操作后的結果會按照主鍵排序。但是,當 Province 上啟用索引后,排序規則會發生變化。

答案:

sql 標準沒有定義未指定 ORDER BY 時的確切排序順序,因此由數據庫系統和底層存儲引擎決定。以 mysql 中常用的 InnoDB 存儲引擎為例:

  • 當沒有匹配的二級索引時,MySQL 會使用主鍵索引,因此結果會按照主鍵排序。
  • 當使用二級索引時,結果會按照二級索引的順序排序。

在上述行政區劃表中,當 Province 上啟用索引時,Distinct() 操作后,結果會按照 Province 索引的順序進行排序,而不是主鍵順序。

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享