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

时间:2012-12-04 14:08:10

标签: mysql

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

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

表是innodb linux上的mysql 5.5

4 个答案:

答案 0 :(得分:2)

你可以像这样的表状态检查它

  SHOW TABLE STATUS FROM db_name LIKE 'table_name';

你看到行列......

答案 1 :(得分:1)

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

尝试::

Select count(1) from my_table

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您可以使用Information Schema

  

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