MySQL中distinct和count(*)的使用方法比較
首先對于MySQL的DISTINCT的關(guān)鍵字的一些用法:
1.在count 不重復(fù)的記錄的時候能用到,比如SELECT COUNT( DISTINCT id ) FROM tablename;就是計算talbebname表中id不同的記錄有多少條。
2,在需要返回記錄不同的id的具體值的時候可以用,比如SELECT DISTINCT id FROM tablename;返回talbebname表中不同的id的具體的值。
3.上面的情況2對于需要返回mysql表中2列以上的結(jié)果時會有歧義,比如SELECT DISTINCT id, type FROM tablename;實際上返回的是 id與type同時不相同的結(jié)果,也就是DISTINCT同時作用了兩個字段,必須得id與tyoe都相同的才被排除了,與我們期望的結(jié)果不一樣。
4.這時候可以考慮使用group_concat函數(shù)來進行排除,不過這個mysql函數(shù)是在mysql4.1以上才支持的。
5.其實還有另外一種解決方式,就是使用,SELECT id, type, count(DISTINCT id) FROM tablename,雖然這樣的返回結(jié)果多了一列無用的count數(shù)據(jù)(或許你就需要這個我說的無用數(shù)據(jù)),返回的結(jié)果是只有id不同的所有結(jié)果和上面的4類型可以互補使用,就是看你需要什么樣的數(shù)據(jù)了。
DISTINCT的效率:
SELECT id, type, count(DISTINCT id) FROM tablename;雖然這樣的返回結(jié)果多了一列無用的count數(shù)據(jù)(或許你就需要這個我說的無用數(shù)據(jù)),SELECT id, type from tablename group by id;這樣貌似也可以,用distinct的時候,如果它有索引,mysql會把它轉(zhuǎn)成group by的方式執(zhí)行。
MySQL數(shù)據(jù)庫對于COUNT(*)的不同處理會造成不同的結(jié)果,比如,
執(zhí)行:SELECT COUNT(*) FROM tablename;即使對于千萬級別的數(shù)據(jù)mysql也能非常迅速的返回結(jié)果。
執(zhí)行: SELECT COUNT(*) FROM tablename WHERE…..;mysql的查詢時間開始攀升。
網(wǎng)上查資料得知:當沒有WHERE語句對于整個mysql的表進行count運算的時候,MyISAM類型的表中保存有總的行數(shù),而當添加有WHERE限定語句的時候Mysql需要對整個表進行檢索,從而得出count的數(shù)值,因此加上where條件的查詢速度就會很慢了。
以上關(guān)于MySQL數(shù)據(jù)庫的distinct以及count(*)的使用就介紹到這里了,希望本次的介紹能夠帶給您一些收獲。
相關(guān)文章
MySQL?數(shù)據(jù)庫?增刪查改、克隆、外鍵?等操作總結(jié)
這篇文章主要介紹了MySQL?數(shù)據(jù)庫?增刪查改、克隆、外鍵?等操作,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05MySQL中show命令方法得到表列及整個庫的詳細信息(精品珍藏)
MySQL中show 句法得到表列及整個庫的詳細信息,方便查看數(shù)據(jù)庫的詳細信息。2010-11-11mysql中find_in_set()函數(shù)用法及自定義增強函數(shù)詳解
這篇文章主要給大家介紹了關(guān)于mysql中find_in_set()函數(shù)用法及自定義增強函數(shù)的相關(guān)資料,在MySQL 數(shù)據(jù)庫中進行復(fù)雜的查詢語句,例如對多個字段進行篩選和排序,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-06-06MySQL中導(dǎo)出用戶權(quán)限設(shè)置的腳本分享
這篇文章主要介紹了MySQL中導(dǎo)出用戶權(quán)限設(shè)置的腳本分享,本文通過導(dǎo)出mysql.user表中數(shù)據(jù)實現(xiàn)導(dǎo)出權(quán)限設(shè)置,需要的朋友可以參考下2014-10-10MySQL對數(shù)據(jù)表已有表進行分區(qū)表的實現(xiàn)
本文主要介紹對現(xiàn)有的一個表進行創(chuàng)建分區(qū)表,并把數(shù)據(jù)遷移到新表,可以按時間來分區(qū),具有一定的參考價值,感興趣的可以了解一下2021-10-10MySQL用truncate命令快速清空一個數(shù)據(jù)庫中的所有表
這篇文章主要介紹了MySQL用truncate命令快速清空一個數(shù)據(jù)庫中的所有表,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2020-11-11