数量查询时,有如下几种方式:
1.下面三种方式,在多数情况下效率是基本相同的,但问题在于,很多情况下,我们数据库可能有脏数据,比如重复数据,或者某条数据重要字段是null的,那下面的这几种,会把这种脏数据也统计上,本质都是统计满足条件的行数的:
select count(*) from `user`
select count(1) from `user`
select count(1) from `user`
2.如果有一张字段很多的表,比如user表,第2个字段是user_name ,第20个字段是school_major,那么下面第一条会比第二条快很多,经过测试,字段在表中越靠后,count时效率越低:
select COUNT(`user_name`) FROM `user`
select COUNT(`school_major`)FROM `user`
3.如果count(column),这个column是建了索引的,那么速度会比没有建立索引的快很多
4.使用count(column)时,一定要注意思考业务逻辑,比如说,查询user表中一共有多少人:
很多人上来就
select count(*) from `user`
这时候,如果数据库中出现同一条记录出现了两遍呢?如果某条记录user_name是空的呢?那下面三种写法,出现的结果就完全不同了:
这是查询这张表的总行数,重复的和null的都算进去。
select count(*) from `user`
这是查询这张表中user_name不为空的行数。
select count(user_name) from `user`
这是查询这张表中,user_name有多少不重复的行,null的也会被统计为一行。
select count(distinct(user_name)) from `user`
以上数据,是在mysql数据库,100万条数据,200万条数据,和300万条数据下做出验证的。
本文同步分享在 博客“IT云清”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。