当前位置: 首页 > 后端技术 > PHP

MySQLInnoDB引擎的count处理以及count(-)和count(1)的区别

时间:2023-03-30 01:50:26 PHP

不讨论MyISAM引擎。MyISAM和InnoDB引擎下count的区别是最基本的区别。文档地址:https://dev.mysql.com/doc/ref...翻译:InnoDB引擎不会在一个表中保留行数,因为并发事务会同时看到不同的行数。因此,SELECTCOUNT(*)语句只统计当前事务可见的行数。在MySQL5.7.18之前,InnoDB引擎通过扫描聚集索引来处理SELECTCOUNT(*)语句。在MySQL5.7.18中,如果有更小的二级索引,InnoDB会水平读取这个来执行SELECTCOUNT(*)语句。如果缓冲池中的索引记录不完??整,则处理selectSELECT(*)语句可能需要一些时间。为了更快地计数,您可以创建一个计数器表并让您的应用程序在插入和删除时更新它。但是,在同一个计数器表中启动数万个并发事务的情况下,这种方法可能无法很好地扩展。如果近似行数足够,则可以使用SHOWTABLESTATUS语句。InnoDB引擎以相同的方式处理SELECTCOUNT(*)和COUNT(1),两者之间没有性能差异。翻译自官方文档,绝对权威