MySQL COUNT查询耗时太长

时间:2016-07-10 19:30:53

标签: mysql mysql-workbench

我通过工作台运行一个非常简单的MySQL查询,以便计算表格中的条目数:

SELECT COUNT(*) FROM database.table

表格中约有300万条目,但计算条目数量需要10多分钟。如果有帮助,我可以在机器上添加额外的处理器和服务器,但此时我只想弄清楚为什么花费这么长时间来计算300万行。

我可以做些什么来让查询更快地运行?

1 个答案:

答案 0 :(得分:2)

对于只有300万行的表格来说,10分钟是荒谬的。我希望它最多需要几秒钟。您必须在同一台服务器上拥有大量其他负载,否则服务器功能不足。

这是InnoDB存储引擎的一大弱点:SELECT COUNT(*)不可优化,因为表中的行数取决于事务的表视图。因此,它必须访问每一行并逐行确定您的事务是否可以“看到”该行。因此SELECT COUNT(*)似乎需要很长时间。

MyISAM在这方面要好一些,因为表元数据保留了表中当前的行数,SELECT COUNT(*)优化了这一点,从元数据中读取了总数。但是,如果您执行SELECT COUNT(*) FROM MyTable WHERE ...any conditions...,这没有任何帮助,因为它只在元数据中保留一个总行数,而不是任何可能的条件的小计。

如果您需要对此进行优化,您可以自己将总数保留在另一个表格中,在INSERT到表格时将其递增,并在DELETE时递减。