起初我想比較count(*)和count(id),哪個有更好的性能?爲什麼mysql count(*)比count更好(id)
MySQL版本
5.6.21-1~dotdeb.1-log
表信息
PRIMARY KEY (`id`),
KEY `is_availability` (`is_availability`,`is_del`)
ENGINE=InnoDB AUTO_INCREMENT=48993819 DEFAULT CHARSET=utf8
比較沒有where條件
select count(*) from op_log; +----------+ | count(*) | +----------+ | 48989975 | +----------+ 1 row in set (10.02 sec) select count(id) from op_log ; +-----------+ | count(id) | +-----------+ | 48989990 | +-----------+ 1 row in set (12.05 sec)
count(*)
優於count(id)
比較WHERE條件
select count(*) from op_log where is_availability=1; +----------+ | count(*) | +----------+ | 48990038 | +----------+ 1 row in set (15.86 sec) select count(id) from op_log where is_availability=1; +-----------+ | count(id) | +-----------+ | 48990096 | +-----------+ 1 row in set (17.13 sec)
count(*)
仍優於count(id)
所以,如果我能得出這樣的結論count(*)
比count(id)
有更好的性能,這是爲什麼?
從High Performance MySQL
,我
如果MySQL知道一些山坳不能爲NULL,這將優化計數(COL)到COUNT(*)內部
所以我懷疑是花費的時間更多的是用來做這個優化工作。
如何'id'定義? – Matthew
搜索是你的朋友:https://duckduckgo.com/?q=mysql+count+performance&t=ffsb - 這裏有很多博客文章。 – Augusto
在mysql中可能有[whats faster,count(\ *)或count(table \ _field \ _name))的重複項?(http://stackoverflow.com/questions/7515531/whats-faster-count-or-counttable-field -name-in-mysql) – Augusto