2012-12-04 50 views
1

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

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

表是InnoDB的 的MySQL 5.5在Linux上

+0

这是一个很大的表,但一个小时听起来很过分的...你尝试过在一个特定的列做一个计数?你使用什么数据库引擎? – RonaldBarzell

+0

我不是MySQL专家,它可能会让我立即想到'SELECT COUNT([单列,最好是简单/小东西])'而不是'COUNT(*)'。 –

+0

你得到了什么错误?你能分享这个错误吗? –

回答

2

你可以用这样的

你看行列的表状况检查....

+0

这不正是我所期待的,但仍然非常出色! 谢谢! – strum

+0

@strum不,不是。在那里显示的数字不需要是正确的。这些只是近似值。桌子越大,它可能从真实价值中获得更大的收益。 – fancyPants

+0

@tombom你是对的! – silly

1

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

Try ::

Select count(1) from my_table 
+0

我认为它不会有所作为,因为表格只有两行(整数)。事实上它没有:-( 但无论如何。 – strum

0

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

0

您可以使用Information Schema

SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = YOUR_DB_NAME和table_name的= YOUR_TABLE_NAME