我有一个大桌子(大约150 M行),如果我尝试运行一个简单的select count(*),那么mysql工作大约一个小时,然后抛出一个错误。在一张大桌子上选择count(*)mysql
我假设这不是由于mysql的限制,而是我身边的问题,但我不知道从哪里开始寻找。有任何想法吗?
表是InnoDB的 的MySQL 5.5在Linux上
我有一个大桌子(大约150 M行),如果我尝试运行一个简单的select count(*),那么mysql工作大约一个小时,然后抛出一个错误。在一张大桌子上选择count(*)mysql
我假设这不是由于mysql的限制,而是我身边的问题,但我不知道从哪里开始寻找。有任何想法吗?
表是InnoDB的 的MySQL 5.5在Linux上
你可以用这样的
你看行列的表状况检查....
这不正是我所期待的,但仍然非常出色! 谢谢! – strum
@strum不,不是。在那里显示的数字不需要是正确的。这些只是近似值。桌子越大,它可能从真实价值中获得更大的收益。 – fancyPants
@tombom你是对的! – silly
您可以使用count(1) instead of count(*)
Try ::
Select count(1) from my_table
我认为它不会有所作为,因为表格只有两行(整数)。事实上它没有:-( 但无论如何。 – strum
加快此类查询的最简单方法是使用covering index。这将允许您扫描所需的行,但每行只需要更少的I/O字节(因为您只扫描每行数据的一部分,而不是整行)。此外,如果您的索引按照与查询相同的方式排序,则可以避免排序成本,并且可以扫描的行数大大减少。
您可以使用Information Schema。
SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = YOUR_DB_NAME和table_name的= YOUR_TABLE_NAME
这是一个很大的表,但一个小时听起来很过分的...你尝试过在一个特定的列做一个计数?你使用什么数据库引擎? – RonaldBarzell
我不是MySQL专家,它可能会让我立即想到'SELECT COUNT([单列,最好是简单/小东西])'而不是'COUNT(*)'。 –
你得到了什么错误?你能分享这个错误吗? –