MySQL查询count(*)、count(1)、count(field)的区别收集


经过查询研究得出这个和MySQL中用什么引擎有关,比如InnoDB和MyISAM在处理这count(*)、count(1)、count(field)都有不同的方式,还有就是和版本都有关系,不同的版本会对查询进行优化处理等等。

下面是网络上普遍的解释:

count(*)对行的数目进行计算,包含NULL
count(column)对特定的列的值具有的行数进行计算,不包含NULL值。

count()还有一种使用方式,count(1)这个用法和count(*)的结果是一样的。

任何情况下select count(*) from tablename是最优选择;

尽量减少select count(*) from tablename where COL = ‘value’这种查询;

杜绝select count(COL) from tablename where COL2 = ‘value’的出现。

如果表没有主键,那么count(1)比count(*)快。

如果有主键,那么count(主键,联合主键)比count(*)快。

如果表只有一个字段,count(*)最快。

count(1)跟count(主键)一样,只扫描主键。count(*)跟count(非主键)一样,扫描整个表。明显前者更快一些。

若含有where语句,则会优先where中条件索引。

做查询优化时,可以根据官方文档和数据来进行尝试和调优,这样去处理才能根本解决问题。

 

参考:

https://segmentfault.com/a/1190000009208277

http://blog.163.com/bobile45@126/blog/static/960619922012915102919319/

https://segmentfault.com/q/1010000000761427

http://blog.csdn.net/unifirst/article/details/52153902

http://www.111cn.net/database/mysql/53202.htm

http://blog.csdn.net/lzm18064126848/article/details/50491956


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM