mysql - MySQL 的 COUNT() 函数是估计值吗?

标签 mysql

我连续三次对 MyISAM 表执行了以下查询:

mysql> SELECT COUNT(*) FROM tickets WHERE created_time BETWEEN UNIX_TIMESTAMP() - 86400 * 20 AND UNIX_TIMESTAMP() - 86400 * 19;

门票表仅接收 created_time 列设置为 UNIX_TIMESTAMP() 的插入,行永远不会被删除,行的 created_time 永远不会更新。尽管如此,我得到的结果是 154324、154326 和 154325(按此顺序)。这让我相信 COUNT() 函数不会返回一个确切的数字,但我通过 MySQL 的文档和网络的其余部分进行的简短搜索没有产生任何提及这一点。有谁知道 COUNT() 的确切作用?

最佳答案

您得到的结果有什么问题?

当您运行查询时,时间窗口会发生变化 - 首先两个新结果进入窗口,然后一个旧结果出现(太旧)。

对于不同的场景,COUNT 的实现方式不同。如果您不使用 WHERE 限制查询并且查询是在单个表上执行的,那么一些存储的内部计数器将用于生成结果。如果限制查询,则首先使用表数据或索引过滤结果,然后对结果行进行计数。

关于mysql - MySQL 的 COUNT() 函数是估计值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1284882/

相关文章:

mysql - SQL 内部连接计算的 select 语句

mysql - 如何根据包含表中字段之一的搜索参数选择行?

MySQL - MySQL 用户定义函数的正确语法

MySQL:非常缓慢的更新/插入/删除查询卡在 "query end"步骤

mysql - 如何将我的重写规则存储在数据库中?

mysql - 根据两列之间的 INT 差异选择其他行

php - 当 IIS 和 Wamp 都在运行时,错误模块 'xmlrpc' 已经加载

php - 在一个后台为MYSQL的网站上集成搜索

mysql - 通用模式提取 json 值和特殊字符

mysql - 在 SET 字段类型中检索具有匹配值的表行