count(*), count(1), count(someColumn) 倒底有没有分别? 使用count(someColumn)只取一列,会不会性能好点? 如果是这样的话,那count(1)是不是性能最佳? 答案: 1. count(*)和count(1)完全是一码事:都是用来数“行数”的。MySQL遇到"*", 并不会去展开它。在性能方面,这类查询会走covering index. 2. count(someColumn)跟其他完全不同,它数的是someColumn列中非NULL值的个数。在性能方面,系统会根据someColumn有没有索引,来决定走不走covering index. 例: drop table if exists play_count; create table play_count( id bigint auto_increment not null, indexed_column varchar(50), –有索引列 non_indexed_column varchar(50), –无索引列 primary key(id), key idx(indexed_column) ); –插入三行数据,存在空值 insert into play_count(indexed_column,non_indexed_column) value(‘a’,null); insert into play_count(indexed_column,non_indexed_column) value(null,’b’); insert into play_count(indexed_column,non_indexed_column) value(‘c’,’c’); –count查询 select count(*) …
MySQL: count()的坑 Read More »