count(*)、count(1)、count(id)、count(普通索引列)、count(未加索引列)
它们分别有什么区别
- count(*) :它会获取所有行的数据,不做任何处理,行数加1。
- count(1):它会获取所有行的数据,每行固定值1,也是行数加1。
- count(id):id代表主键,它需要从所有行的数据中解析出id字段,其中id肯定都不为NULL,行数加1。
- count(普通索引列):它需要从所有行的数据中解析出普通索引列,然后判断是否为NULL,如果不是NULL,则行数+1。
- count(未加索引列):它会全表扫描获取所有数据,解析中未加索引列,然后判断是否为NULL,如果不是NULL,则行数+1。
由此,最后count的性能从高到低是:
count(*) ≈ count(1) > count(id) > count(普通索引列) > count(未加索引列)
所以,其实
count(*)
是最快的,千万别跟
select *
搞混了
版权声明:本文为zxm18751880909原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。