MySQL count(*),count(1),count(field)区别、性能差异及优化建议
count函数是用来获取表中满足一定条件的记录数,常见用法有三种,count(*),count(1),count(field),这三种有什么区别?在性能上有何差异?本文将通过测试案例详细介绍和分析。
原文地址:
mytecdb.com/blogDetail.php?id=81
三者有何区别:
- count(field)不包含字段值为NULL的记录。
- count(*)包含NULL记录。
- select(*)与select(1) 在InnoDB中性能没有任何区别,处理方式相同。官方文档描述如下:
InnoDB handles SELECT COUNT(*) and SELECT COUNT(1) operations in the same way. There is no performance difference.
1. 性能对比
通过案例来测试一下count(*),count(1),count(field)的性能差异,MySQL版本为5.7.19,测试表是一张sysbench生成的表,表名sbtest1,总记录数2411645,如下:
CREATE TABLE sbtest1 (
id int(11) NOT NULL AUTO_INCREMENT,
k int(11) DEFAULT NULL,
c char(120) NOT NULL DEFAULT '',
pad char(60) NOT NULL DEFAULT '',
PRIMARY KEY (id),
KEY k_1 (k)
) ENGINE=InnoDB;