第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么更快,MySQL中的SELECT DISTINCT或GROUP BY?

什么更快,MySQL中的SELECT DISTINCT或GROUP BY?

皈依舞 2019-08-09 17:44:19
什么更快,MySQL中的SELECT DISTINCT或GROUP BY?如果我有一張桌子CREATE TABLE users (   id int(10) unsigned NOT NULL auto_increment,   name varchar(255) NOT NULL,   profession varchar(255) NOT NULL,   employer varchar(255) NOT NULL,   PRIMARY KEY  (id))我希望獲得所有獨特的profession字段值,更快(或推薦):SELECT DISTINCT u.profession FROM users u要么SELECT u.profession FROM users u GROUP BY u.profession?
查看完整描述

3 回答

?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

它們本質上是相互對應的(實際上這是一些數據庫DISTINCT在引擎蓋下實現的方式)。

如果其中一個更快,那就是DISTINCT。這是因為,雖然兩者是相同的,但查詢優(yōu)化器必須抓住這樣一個事實:你GROUP BY沒有利用任何組成員,只有他們的密鑰。DISTINCT使這個顯而易見,所以你可以使用稍微笨拙的優(yōu)化器。

如有疑問,請測試!


查看完整回答
反對 回復 2019-08-09
?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

如果您有索引profession,則這兩個是同義詞。

如果你不這樣做,那就用吧DISTINCT

GROUP BYMySQL各種結果。你甚至可以這樣做:

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。


查看完整回答
反對 回復 2019-08-09
?
紫衣仙女

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)化!


查看完整回答
反對 回復 2019-08-09
  • 3 回答
  • 0 關注
  • 883 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號