我有一个大表(大约 150 M 行),如果我尝试在其上运行一个简单的 select count(*),那么 mysql 工作大约一个小时然后抛出一个错误。
我假设这不是由于 mysql 的限制,而是我这边的问题,但我不知道从哪里开始寻找。有任何想法吗?
该表是linux上的innodb mysql 5.5
我有一个大表(大约 150 M 行),如果我尝试在其上运行一个简单的 select count(*),那么 mysql 工作大约一个小时然后抛出一个错误。
我假设这不是由于 mysql 的限制,而是我这边的问题,但我不知道从哪里开始寻找。有任何想法吗?
该表是linux上的innodb mysql 5.5
你可以用这样的表状态检查它
SHOW TABLE STATUS FROM db_name LIKE 'table_name';
你看到 rows 列....
您可以使用count(1) instead of count(*)
尝试 ::
Select count(1) from my_table
加快此类查询的最简单方法是使用覆盖索引。这将允许您扫描所需的行,但每行需要更少的 I/O 字节(因为您只扫描每行数据的一部分,而不是整行)。此外,如果您的索引以与查询相同的方式排序,您可以避免排序成本并且可以扫描的行数大大减少。
您可以使用信息架构。
从 INFORMATION_SCHEMA.TABLES 中选择 TABLE_ROWS,其中 table_schema = YOUR_DB_NAME AND table_name = YOUR_TABLE_NAME