说明
查询符合条件的行数的SQL语句,常有如下三种,效率各不相同。
> SELECT COUNT(*) FROM user;
> SELECT COUNT(1) FROM user;
> SELECT COUNT(id) FROM user;
在MYISAM存储引擎下,COUNT(*)的效率是最高的。因为该类存储引擎有内部计数器,可直接返回符合条件的行数。
在INNODB存储引擎下,COUNT(*)和COUNT(1)的效率差不多,COUNT(字段)的效率最低。因为COUNT(字段)需要对每一个字段做判断,判断其是否为NULL。
面试题
以下SQL语句的查询结果是否一致,说明理由?
> SELECT COUNT(*) FROM user; > SELECT COUNT(id) FROM user; > SELECT COUNT(*) FROM user WHERE id LIKE "%%";
答:第一条SQL查询的是user表的总行数,第二条SQL语句和第三条SQL查询的也是排除字段id为NULL的行数。