我连续三次在MyISAM表上执行以下查询:
mysql> SELECT COUNT(*) FROM tickets WHERE created_time BETWEEN UNIX_TIMESTAMP() - 86400 * 20 AND UNIX_TIMESTAMP() - 86400 * 19;
Run Code Online (Sandbox Code Playgroud)
ticket表仅接收insert_,其中created_time列设置为UNIX_TIMESTAMP(),永远不会删除行,并且永远不会更新行的created_time.尽管如此,我得到的结果是154324,154326和154325(按此顺序).这导致我相信COUNT()函数不会返回确切的数字,但是我对MySQL文档和网络其余部分的简要搜索没有提到这一点.有谁知道COUNT()的作用,究竟是什么?
你得到的结果有什么问题?
在运行查询时,时间窗口正在移动 - 前两个新结果进入窗口,然后一个旧结果出来(太旧).
对于不同的方案,COUNT的实现方式不同.如果不使用WHERE限制查询并且在单个表上执行查询,则使用一些存储的内部计数器来生成结果.如果限制查询,则首先使用表数据或索引过滤结果,然后计算结果行.
| 归档时间: |
|
| 查看次数: |
414 次 |
| 最近记录: |