2

我有一个大表(大约 150 M 行),如果我尝试在其上运行一个简单的 select count(*),那么 mysql 工作大约一个小时然后抛出一个错误。

我假设这不是由于 mysql 的限制,而是我这边的问题,但我不知道从哪里开始寻找。有任何想法吗?

该表是linux上的innodb mysql 5.5

4

4 回答 4

2

你可以用这样的表状态检查它

  SHOW TABLE STATUS FROM db_name LIKE 'table_name';

你看到 rows 列....

于 2012-12-04T14:12:08.713 回答
1

您可以使用count(1) instead of count(*)

尝试 ::

Select count(1) from my_table
于 2012-12-04T14:15:49.983 回答
0

加快此类查询的最简单方法是使用覆盖索引。这将允许您扫描所需的行,但每行需要更少的 I/O 字节(因为您只扫描每行数据的一部分,而不是整行)。此外,如果您的索引以与查询相同的方式排序,您可以避免排序成本并且可以扫描的行数大大减少。

于 2012-12-04T14:34:29.640 回答
0

您可以使用信息架构

从 INFORMATION_SCHEMA.TABLES 中选择 TABLE_ROWS,其中 table_schema = YOUR_DB_NAME AND table_name = YOUR_TABLE_NAME

于 2017-05-11T09:55:21.540 回答