选择在MySql表上花费很长时间的计数(*)

时间:2015-02-18 13:07:07

标签: mysql sql

我们在MySql DB中有一个大小约为35千兆字节的表

我运行了一个简单的查询

select count(*) from table_name

此查询需要超过10分钟,然后连接断开,为什么需要这么长时间

我们的表架构中没有主键,这是原因吗?

如果您需要我可以提供的任何其他详细信息

由于

2 个答案:

答案 0 :(得分:3)

这可能是InnoDB表。由于InnoDB支持事务,因此表永远不会处于静态状态,部分表始终可以更改。 count()必须遍历并计算每条记录,这就是为什么它需要这么长时间。即使这样,它也更多地是一种估计,取决于桌面上的活动。

快速获取InnoDB表的计数方法是查看唯一索引的基数(即自动增量字段的主键)。您可以通过运行“SHOW INDEX FROM table_name”命令来查看此信息。基数是该索引中唯一的值数。对于唯一索引,这是记录数。

答案 1 :(得分:-1)

在mssql中,我会这样做

Select count(*) from table_name(nolock)

必须有一种方法可以在mysql中读取未提交的内容..