我们在Debian上使用的是MySQL 5.0.51。我有一个大型的数据库(一个表上有超过8000万行,另一个表上有30+百万行,另一个表上有2000万行,等等,每个表都有一个整数主键,而且大多数表也相当宽),服务器的工作也相当繁重。
我们使用的框架(Ruby on Rails)有made a minor tweak,这造成了真正的问题,我想知道这是不是只影响我们的东西,还是它所做的查询类型的固有问题。
在启动一个新的Rails进程时,框架对每个表(即InnoDB)运行"SHOW INDEX FROM foo WHERE Key_name = 'PRIMARY'“。在我们的服务器上,根据加载/其他查询的不同,较大的表需要5到15秒。这加起来有很多秒。
这是意料之中的行为,还是只会在某些有限的情况下发生,是否有任何解决方案(一个可能是使用"SHOW CREATE TABLE foo“来获取相同的信息)。
发布于 2011-11-23 19:35:25
不,它不应该很慢。我刚刚在一个大约有4000万行的表上尝试了它,它只需要不到0.1秒。
SHOW INDEX应该只提供表统计数据中已有的信息。我能想到的唯一一件事是,如果表上没有统计数据,mysql内部调用ANALYZE TABLE,但我希望不是这样,那将是非常糟糕的。
发布于 2011-12-01 01:18:20
我们在Rails 3.1上也遇到了同样的问题。问题是,如果后面的表没有主键,则ActiveRecord操作调用SHOW INDEX的次数太多。您说您的表有主键,但是是否有一些ActiveRecord不能理解的属性呢?
我提出了一个拉取请求,要求修复没有主键的问题,因此您可能会在那里找到答案。
https://stackoverflow.com/questions/8241061
复制相似问题