奇怪的 SQL table 查询结果 - 总行数不相加
Weird SQL table query results - total rows not adding up
今天,我不得不向 mySQL 数据库中的 table 添加几千行。在我添加行之前,我向 table 添加了一个列 dateAdded
,默认设置为 current_timestamp()
(现有行将具有此列的 NULL
)。我添加了行,然后做了一些双重检查。这是奇怪的地方:
- 如果我浏览
phpMyAdmin
中的 table,它会显示 Showing rows 0 - 24 (190,022 total ...)
- 如果我搜索
dateAdded IS NULL
处的条目,我会得到 184,854 行
- 如果我搜索
dateAdded IS NOT NULL
处的条目,我会得到 6,779 行。没错,这就是我今天加了多少
请注意,如果将 2 和 3 的总行数相加,您会得到 191,633 行,但 1 声称只有 190,022行。
我以前从来没有注意到这种事情。正常吗?我应该擦除 table 然后从头开始重新添加所有内容吗?
请注意,我将 table 导出到 CSV 并在 Excel 中打开,果然有 191,633 行
差异来自 phpMyAdmin 使用 SHOW TABLE STATUS
而不是 SELECT COUNT
。这是一项性能优化,可避免在大型 table 上使用 SELECT COUNT
,这在某些情况下会带来显着的开销。
phpMyAdmin 有一个 MaxExactCount 配置设置用于决定是使用 SELECT COUNT
还是 SHOW TABLE STATUS
的阈值
For InnoDB tables, determines for how large tables phpMyAdmin should
get the exact row count using SELECT COUNT. If the approximate row
count as returned by SHOW TABLE STATUS is smaller than this value,
SELECT COUNT will be used, otherwise the approximate count will be
used.
Changed in version 4.8.0: The default value was lowered to 50000 for
performance reasons.
Changed in version 4.2.6: The default value was changed to 500000.
在 MySQL 手册中,SHOW TABLE STATUS 对 Rows
列的描述是 -
The number of rows. Some storage engines, such as MyISAM, store the
exact count. For other storage engines, such as InnoDB, this value is
an approximation, and may vary from the actual value by as much as 40%
to 50%. In such cases, use SELECT COUNT(*) to obtain an accurate
count.
您可以在 -
阅读更多关于 InnoDB 和 table 行统计的信息
今天,我不得不向 mySQL 数据库中的 table 添加几千行。在我添加行之前,我向 table 添加了一个列 dateAdded
,默认设置为 current_timestamp()
(现有行将具有此列的 NULL
)。我添加了行,然后做了一些双重检查。这是奇怪的地方:
- 如果我浏览
phpMyAdmin
中的 table,它会显示Showing rows 0 - 24 (190,022 total ...)
- 如果我搜索
dateAdded IS NULL
处的条目,我会得到 184,854 行 - 如果我搜索
dateAdded IS NOT NULL
处的条目,我会得到 6,779 行。没错,这就是我今天加了多少
请注意,如果将 2 和 3 的总行数相加,您会得到 191,633 行,但 1 声称只有 190,022行。
我以前从来没有注意到这种事情。正常吗?我应该擦除 table 然后从头开始重新添加所有内容吗?
请注意,我将 table 导出到 CSV 并在 Excel 中打开,果然有 191,633 行
差异来自 phpMyAdmin 使用 SHOW TABLE STATUS
而不是 SELECT COUNT
。这是一项性能优化,可避免在大型 table 上使用 SELECT COUNT
,这在某些情况下会带来显着的开销。
phpMyAdmin 有一个 MaxExactCount 配置设置用于决定是使用 SELECT COUNT
还是 SHOW TABLE STATUS
For InnoDB tables, determines for how large tables phpMyAdmin should get the exact row count using SELECT COUNT. If the approximate row count as returned by SHOW TABLE STATUS is smaller than this value, SELECT COUNT will be used, otherwise the approximate count will be used.
Changed in version 4.8.0: The default value was lowered to 50000 for performance reasons.
Changed in version 4.2.6: The default value was changed to 500000.
在 MySQL 手册中,SHOW TABLE STATUS 对 Rows
列的描述是 -
The number of rows. Some storage engines, such as MyISAM, store the exact count. For other storage engines, such as InnoDB, this value is an approximation, and may vary from the actual value by as much as 40% to 50%. In such cases, use SELECT COUNT(*) to obtain an accurate count.
您可以在 -
阅读更多关于 InnoDB 和 table 行统计的信息