MySQL获取innodb表的行数

发布于 2024-10-19 09:20:27 字数 276 浏览 1 评论 0原文

我有一个使用 innodb 的表。我知道该表大约有 8900 万行。使用

SELECT COUNT(*) FROM table;

运行大约需要五分钟。我知道 innodb 没有针对无条件 COUNT(*) 查询进行优化。如何重构查询以更快地进行计数?只需添加 WHERE 1=1 即可,还是我需要查询特定字段?

我知道我可以使用 SHOW TABLE STATUS 获取大致的行数,但我想获取 PHP 脚本中的值,并且使用该方法似乎有很多需要挖掘的内容。

I have a table using innodb. I know the table has roughly 89 million rows. Using

SELECT COUNT(*) FROM table;

takes about five minutes to run. I know that innodb is not optimized for unconditional COUNT(*) queries. How can I restructure the query to give me a count faster? Would just adding WHERE 1=1 work, or do I need to query a specific field?

I know I can get the approximate number of rows using SHOW TABLE STATUS, but I want to get the value in a PHP script, and it seems like there is a lot to dig through using that method.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

秋千易 2024-10-26 09:20:27

如果您对估计的数字感到满意,并且只是不想混乱从 PHP 运行 SHOW TABLE STATUS,您可以使用 information_schema DB:

SELECT TABLE_ROWS FROM information_schema.tables
WHERE TABLE_SCHEMA = 'my_db_name' 
AND TABLE_NAME = 'my_table_name';

If you are OK with the estimated number and just don't want to mess with running SHOW TABLE STATUS from PHP, you can use the information_schema DB:

SELECT TABLE_ROWS FROM information_schema.tables
WHERE TABLE_SCHEMA = 'my_db_name' 
AND TABLE_NAME = 'my_table_name';
盗心人 2024-10-26 09:20:27

如果您对大概的记录数没问题,则可以使用“explain”的输出。

代码的简化版本是

$result = mysql_query('explain SELECT count(*) from TABLE_NAME');
$row = mysql_fetch_assoc($result);
echo $row['rows'];

If you are ok with approximate number of records, you can use output of "explain".

Simplified verion of the code is

$result = mysql_query('explain SELECT count(*) from TABLE_NAME');
$row = mysql_fetch_assoc($result);
echo $row['rows'];
咆哮 2024-10-26 09:20:27

如果该表被频繁读取且不经常更新,您可能需要考虑创建一个通过 对表进行更改时触发

If the table is read frequently and updated infrequently, you may want to consider creating a statistics table that is updated via triggers when making changes to the table.

拒绝两难 2024-10-26 09:20:27

mysql_num_rows 可能对您有用。

mysql_num_rows may be useful to you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文