mysql技巧之selectcount的區(qū)別分析
來源:懂視網(wǎng)
責(zé)編:小采
時間:2020-11-09 21:06:46
mysql技巧之selectcount的區(qū)別分析
mysql技巧之selectcount的區(qū)別分析:1.測試環(huán)境 OS:LinuxDB:mysql-5.5.18table:innodb存儲引擎 表定義如下: 2. 測試場景與分析【統(tǒng)計表group_message的記錄數(shù)目】 (1)select count(*)方式 (2)select count(1)方式 (3)select count(col_name)方式 分
導(dǎo)讀mysql技巧之selectcount的區(qū)別分析:1.測試環(huán)境 OS:LinuxDB:mysql-5.5.18table:innodb存儲引擎 表定義如下: 2. 測試場景與分析【統(tǒng)計表group_message的記錄數(shù)目】 (1)select count(*)方式 (2)select count(1)方式 (3)select count(col_name)方式 分

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這個最短的二級索引。可能有人會問為啥不用更短的主鍵索引【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中的count()與sum()區(qū)別詳細(xì)介紹MYSQL中統(tǒng)計查詢結(jié)果總行數(shù)的便捷方法省去count(*)有關(guān)mysql中ROW_COUNT()的小例子mySQL count多個表的數(shù)據(jù)實例詳解關(guān)于mysql innodb count(*)速度慢的解決辦法MySQL里的found_row()與row_count()的解釋及用法MySQL中distinct和count(*)的使用方法比較詳細(xì)解讀MySQL中COUNT函數(shù)的用法MySQL中count(*)、count(1)和count(col)的區(qū)別匯總MySQL中無過濾條件的count詳解
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com
mysql技巧之selectcount的區(qū)別分析
mysql技巧之selectcount的區(qū)別分析:1.測試環(huán)境 OS:LinuxDB:mysql-5.5.18table:innodb存儲引擎 表定義如下: 2. 測試場景與分析【統(tǒng)計表group_message的記錄數(shù)目】 (1)select count(*)方式 (2)select count(1)方式 (3)select count(col_name)方式 分