MySQL - 大表的基本问题

时间:2011-09-15 20:49:40

标签: mysql linux innodb

在我的数据库中有两个大表。第一个(A)有170万行,第二个(B):2.1百万。 A和B中的记录大小相同。

我可以在A上做任何操作。这需要时间,但它确实有效。在B,我什么都做不了。即使是简单的选择计数(*)也只是永远挂起。问题是我没有看到任何错误:它只是挂起(当我显示进程列表时它只是说“更新”)。

对我来说,似乎很奇怪的是,1.7到210万之间的小三角洲(百分比)可以产生这样的差异(从能够做到一切,甚至不能做最简单的操作)。

可以存在某种200万行硬限制吗?

我在Linux 2.6+上,我使用innoDB。

谢谢! 皮尔

3 个答案:

答案 0 :(得分:1)

看起来它更多地取决于每行中的数据量而不是总行数。如果行包含的数据很少,则返回的最大行数将高于包含更多数据的行数。查看此链接以获取更多信息:

http://dev.mysql.com/doc/refman/5.0/en/innodb-restrictions.html

答案 1 :(得分:0)

第二个表的行大小(存储一行所需的字节数)可能要大得多。 Count(*)可能需要全表扫描 - 即读取磁盘上的整个表 - 较大的行意味着更多的I / O和更长的时间。

索引的存在/不存在也可能会产生影响。

答案 2 :(得分:0)

正如我在最初的帖子中所说,事情是两个表非常相似,因此两个表中的行大小相当接近。这就是为什么我有点惊讶,我开始认为,不知何故,可能会在某处设置200万的限制。

事实证明我的桌子已损坏了。这很奇怪,因为我仍然能够访问一些记录(使用与其他表的连接),而mySQL并没有“抱怨”。我发现了一个CHECK TABLE:它没有返回任何错误,但每次都崩溃了mysqld ......

无论如何,谢谢大家的帮助。

皮尔