MySql-count(*)與count(id)與count(字段)之間的執行結果和性能分析


在mysql數據庫中,當我們需要統計數據的時候,一定會用到count()這個方法,那么count(值)里面的這個值,到底應該怎么選擇呢!常見有3種選擇,(*,數字,列名),分別列出它們的執行結果和性能對比。

執行效果:  
count(*)包括了所有的列,相當於行數,在統計結果的時候,不會忽略列值為NULL 
count(1)包括了忽略所有列,用1代表代碼行,在統計結果的時候,不會忽略列值為NULL  
count(列名)只包括列名那一列,在統計結果的時候,會忽略列值為空(這里的空不是指空字符串或者0,而是null)的計數,即某個字段值為NULL時,不統計。

測試結果:  

 1 CREATE TABLE `test_count` (
 2   `id` int(11) NOT NULL AUTO_INCREMENT,
 3   `phone` varchar(11) DEFAULT NULL,
 4   `nick_name` varchar(50) DEFAULT NULL,
 5   `username` varchar(50) DEFAULT NULL,
 6   `password` varchar(50) DEFAULT NULL,
 7   `gender` tinyint(1) DEFAULT NULL,
 8   `is_del` tinyint(1) DEFAULT NULL,
 9   PRIMARY KEY (`id`),
10   KEY `index_username` (`username`) USING BTREE
11 ) ENGINE=InnoDB AUTO_INCREMENT=17805 DEFAULT CHARSET=utf8;
 1 [SQL] SELECT COUNT(*) FROM test_count;
 2 受影響的行: 0
 3 時間: 0.828ms
 4  
 5 [SQL] 
 6 SELECT COUNT(1) FROM test_count;
 7 受影響的行: 0
 8 時間: 0.827ms
 9  
10 [SQL] 
11 SELECT COUNT(id) FROM test_count;
12 受影響的行: 0
13 時間: 0.873ms
14  
15 [SQL] 
16 SELECT COUNT(username) FROM test_count;
17 受影響的行: 0
18 時間: 0.981ms
19  
20 [SQL] 
21 SELECT COUNT(nick_name) FROM test_count;
22 受影響的行: 0
23 時間: 7.673ms

在100W+數據下,count(*)和count(1)差距微乎其微,但兩者效率大於count(id),count(id)效率明顯大於count(column),帶索引的count(column)明顯效率高於不帶索引的。

最終結論:

count(1) > count(*) > count(主鍵id) > count(帶索引column) > count(不帶索引column),count(1)效率稍微高於count(*),但差距微乎其微。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM