Mysql 在一个大表上选择count(*)

Mysql 在一个大表上选择count(*),mysql,Mysql,我有一个很大的表(大约150m行),如果我尝试在表上运行一个简单的select count(*),那么mysql工作大约一个小时,然后抛出一个错误 我假设这不是因为mysql的限制,而是我的问题,但我不知道从哪里开始寻找。有什么想法吗 这张桌子是innodb的 linux上的mysql 5.5您可以使用如下表状态检查它 SHOW TABLE STATUS FROM db_name LIKE 'table_name'; 您将看到行列……您可以使用count(1)而不是count(*) 试试看

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

我假设这不是因为mysql的限制,而是我的问题,但我不知道从哪里开始寻找。有什么想法吗

这张桌子是innodb的
linux上的mysql 5.5

您可以使用如下表状态检查它

  SHOW TABLE STATUS FROM db_name LIKE 'table_name';
您将看到行列……

您可以使用
count(1)而不是count(*)

试试看:

Select count(1) from my_table

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

您可以使用

从信息_SCHEMA.TABLES WHERE TABLE_SCHEMA中选择表_行= 您的\u DB\u名称和表\u名称=您的\u表\u名称


那是一张大桌子,虽然一个小时听起来太长了。。。你试过对某一列进行计数吗?您使用的是什么数据库引擎?我不是MySQL专家,我立刻想到您可能希望尝试
选择COUNT([一列,最好是简单/小的])
而不是
COUNT(*)
。您遇到了什么错误?你能分享这个错误吗?这是一个有两列的表(一个多连接表),引擎是innodb。有一件事我没有提到,那就是这个表写得太多了。你得到的错误是什么?这不是我想要的,但仍然很好!谢谢@斯特拉姆:不,不是。这里显示的数字不需要是正确的。这些只是近似值。表越大,它可能离真值越远。我认为这不会有什么区别,因为表只有两行(整数)。事实上,它没有:-(不过还是要谢谢你。