MySQL:針對唯一值選擇 DISTINCT 與 GROUP BY
從 MySQL 表中檢索唯一值時,SELECT DISTINCT
和 GROUP BY
似乎可以互換,但它們的效能可能會大不相同。 本文比較了它們的效率。
場景:獨特職業檢索
考慮一個查詢,從 users
表中擷取「XYZ」員工的唯一職業:
<code class="language-sql">SELECT u.profession FROM users u WHERE u.employer = 'XYZ' ORDER BY u.profession</code>
為了確保只回到唯一的職業,我們可以使用 SELECT DISTINCT
或 GROUP BY
:
選項 1:SELECT DISTINCT
<code class="language-sql">SELECT DISTINCT u.profession FROM users u WHERE u.employer = 'XYZ' ORDER BY u.profession</code>
選項 2:GROUP BY
<code class="language-sql">SELECT u.profession FROM users u WHERE u.employer = 'XYZ' GROUP BY u.profession ORDER BY u.profession</code>
效能注意事項
雖然兩個查詢產生相同的輸出,但 SELECT DISTINCT
通常提供更好的效能。 MySQL 使用位圖或雜湊表等技術來最佳化 SELECT DISTINCT
,在一次傳遞中有效地過濾重複項。 GROUP BY
相反,涉及對行進行分組和額外的聚合開銷,可能會減慢查詢執行速度。
例外:當GROUP BY
可能更快時
雖然SELECT DISTINCT
通常佔上風,但GROUP BY
在特定情況下可以勝過它。 如果 ORDER BY
子句包含 profession
列之外的列,則 GROUP BY
可能會提供卓越的最佳化。
推薦
要檢索 MySQL 中的唯一值,SELECT DISTINCT
通常是更有效的選擇。 然而,使用您的特定資料對這兩個查詢進行基準測試對於確定應用程式的最佳方法至關重要。
以上是SELECT DISTINCT 與 GROUP BY:MySQL 中唯一值檢索哪個比較快?的詳細內容。更多資訊請關注PHP中文網其他相關文章!