mysql技巧之select count的區(qū)別分析
1.測試環(huán)境
OS:Linux
DB:mysql-5.5.18
table:innodb存儲引擎
表定義如下:

2. 測試場景與分析【統(tǒng)計表group_message的記錄數(shù)目】
(1)select count(*)方式

(2)select count(1)方式

(3)select count(col_name)方式
分別使用
select count(group_id)
select count(user_id)
select count(col_null)

通過上述測試結果可以看到,select count(*)和select count(1)都使用了group_id這個最短的二級索引??赡苡腥藭枮樯恫挥酶痰闹麈I索引【int類型】呢,這主要是因為innodb存儲引擎下,主鍵索引實質包含了索引和數(shù)據(jù),掃描主鍵索引實際是掃描物理記錄,代價實質是最大的。再來看看幾種select count(col_name), count(group_id)使用了最短二級索引,因為該列就是索引列;而count(user_id)則使用了組合索引,由于user_id實質不能利用該索引,但掃描索引也能得到記錄數(shù),而且比掃描物理記錄代價小,這里應該是mysql的一個優(yōu)化;count(col_null)則不能使用索引,因為該列含有null值,所以效率最低。另外,對于含有null值的行,count(col_null)實際不會統(tǒng)計,這會與你想統(tǒng)計表記錄數(shù)目的初衷不符,比如測試表有852226條記錄,但col_null列只有1行非空,則統(tǒng)計結果如下:

3.測試結論
mysql中,需要通過selct count 統(tǒng)計表記錄數(shù)目時,使用count(*)或count(1)就好。
相關文章
詳解在Windows環(huán)境下訪問linux虛擬機中MySQL數(shù)據(jù)庫
這篇文章主要介紹了如何Windows環(huán)境下訪問linux虛擬機中MySQL數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-04-04
MySQL同步ES(Elasticsearch)的四種常見方案分享
MySQL和Elasticsearch(ES)是兩個非常重要的數(shù)據(jù)存儲和搜索技術,MySQL是一種關系型數(shù)據(jù)庫,而ES則是一種文檔型數(shù)據(jù)庫,在許多情況下,我們需要將MySQL中的數(shù)據(jù)同步到ES中,本文將介紹四種常見的MySQL同步ES方案,需要的朋友可以參考下2023-07-07
MySQL 中 blob 和 text 數(shù)據(jù)類型詳解
本文主要介紹了MySQL中blob和text數(shù)據(jù)類型詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02
mysql數(shù)據(jù)庫在表中添加數(shù)據(jù)三種操作方式
這篇文章主要介紹了mysql數(shù)據(jù)庫在表中添加數(shù)據(jù)三種方式,首先創(chuàng)建數(shù)據(jù)庫和表,創(chuàng)建完成后就可以進行添加數(shù)據(jù)的操作了,本文結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2023-08-08
MySQL數(shù)據(jù)庫統(tǒng)計函數(shù)COUNT的使用及說明
這篇文章主要介紹了MySQL數(shù)據(jù)庫統(tǒng)計函數(shù)COUNT的使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07

