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)

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

3.測試結(jié)論
mysql中,需要通過selct count 統(tǒng)計表記錄數(shù)目時,使用count(*)或count(1)就好。
- MySQL select、insert、update批量操作語句代碼實例
- 解決MySQL讀寫分離導(dǎo)致insert后select不到數(shù)據(jù)的問題
- MySQL將select結(jié)果執(zhí)行update的實例教程
- MySQL之select、distinct、limit的使用
- 為什么MySQL不建議使用SELECT?*
- MySQL運行報錯:“Expression?#1?of?SELECT?list?is?not?in?GROUP?BY?clause?and?contains?nonaggre”解決方法
- MySQL select count(*)計數(shù)很慢優(yōu)化方案
相關(guān)文章
winx64下mysql5.7.19的基本安裝流程(詳細(xì))
這篇文章主要介紹了winx64下mysql5.7.19的基本安裝流程,需要的朋友可以參考下2017-10-10
詳解在Windows環(huán)境下訪問linux虛擬機(jī)中MySQL數(shù)據(jù)庫
這篇文章主要介紹了如何Windows環(huán)境下訪問linux虛擬機(jī)中MySQL數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
MYSQL 隨機(jī) 抽取實現(xiàn)方法及效率分析
MYSQL的隨機(jī)抽取實現(xiàn)方法。舉個例子,要從tablename表中隨機(jī)提取一條記錄,大家一般的寫法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1。2009-05-05
MySQL同步ES(Elasticsearch)的四種常見方案分享
MySQL和Elasticsearch(ES)是兩個非常重要的數(shù)據(jù)存儲和搜索技術(shù),MySQL是一種關(guān)系型數(shù)據(jù)庫,而ES則是一種文檔型數(shù)據(jù)庫,在許多情況下,我們需要將MySQL中的數(shù)據(jù)同步到ES中,本文將介紹四種常見的MySQL同步ES方案,需要的朋友可以參考下2023-07-07
MySQL 中 blob 和 text 數(shù)據(jù)類型詳解
本文主要介紹了MySQL中blob和text數(shù)據(jù)類型詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02
mysql數(shù)據(jù)庫在表中添加數(shù)據(jù)三種操作方式
這篇文章主要介紹了mysql數(shù)據(jù)庫在表中添加數(shù)據(jù)三種方式,首先創(chuàng)建數(shù)據(jù)庫和表,創(chuàng)建完成后就可以進(jìn)行添加數(shù)據(jù)的操作了,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08
MySQL數(shù)據(jù)庫統(tǒng)計函數(shù)COUNT的使用及說明
這篇文章主要介紹了MySQL數(shù)據(jù)庫統(tǒng)計函數(shù)COUNT的使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07

