3 回答

TA貢獻1871條經驗 獲得超8個贊
它們本質上是相互對應的(實際上這是一些數據庫DISTINCT
在引擎蓋下實現的方式)。
如果其中一個更快,那就是DISTINCT
。這是因為,雖然兩者是相同的,但查詢優(yōu)化器必須抓住這樣一個事實:你GROUP BY
沒有利用任何組成員,只有他們的密鑰。DISTINCT
使這個顯而易見,所以你可以使用稍微笨拙的優(yōu)化器。
如有疑問,請測試!

TA貢獻2051條經驗 獲得超10個贊
如果您有索引profession
,則這兩個是同義詞。
如果你不這樣做,那就用吧DISTINCT
。
GROUP BY
在MySQL
各種結果。你甚至可以這樣做:
SELECT u.profession FROM users u GROUP BY u.profession DESC
讓你的職業(yè)按DESC
順序排序。
DISTINCT
創(chuàng)建一個臨時表并使用它來存儲重復項。GROUP BY
做同樣的事情,但事后對不同的結果進行排序。
所以
SELECT DISTINCT u.profession FROM users u
如果您沒有索引,則更快profession
。

TA貢獻1839條經驗 獲得超15個贊
上面的所有答案都是正確的,對于單列上的DISTINCT與單列上的GROUP BY的情況。每個數據庫引擎都有自己的實現和優(yōu)化,如果你關心的差別很?。ㄔ诖蠖鄶登闆r下),那么你必須針對特定的服務器和特定版本進行測試!隨著實施可能會改變......
但是,如果您在查詢中選擇了多個列,那么DISTINCT本質上是不同的!因為在這種情況下,它將比較所有行的所有列,而不是僅比較一列。
所以如果你有類似的東西:
// This will NOT return unique by [id], but unique by (id,name)SELECT DISTINCT id, name FROM some_query_with_joins// This will select unique by [id].SELECT id, name FROM some_query_with_joins GROUP BY id
認為DISTINCT關鍵字按行指定的第一列來區(qū)分行是一個常見的錯誤,但DISTINCT是這種方式的通用關鍵字。
因此,人們必須小心,不要將上述答案視為所有情況的正確答案......您可能會感到困惑并得到錯誤的結果,而您想要的只是優(yōu)化!
添加回答
舉報