2011-01-24 76 views
0

我有2个数据库:localhost & remotehost。本地主机似乎运行良好,并迅速得到我的结果(低于1秒...感谢这个委员会的帮助)。使用mysqldump,我将本地主机转储到远程主机,包括表结构,索引,&数据。我期望remotehost是本地主机的虚拟副本,但是当我在远程主机上运行我的查询时,他们需要> 1分钟才能执行。解释说法甚至不同......有很多不同之处,包括将“类型”更改为“范围”以及使用的索引等等。相同的数据库,但不同的解释结果

(一些这也许可以通过强制使用主索引固定的,但我宁愿找到问题的根源,并明白为什么远程主机的行为有所不同)

我声明:

SELECT names.id, names.first, addr.last FROM names, addr WHERE names.first LIKE 'H%' AND addr.last IS NOT NULL AND names.id = addr.id GROUP BY names.id LIMIT 10 

EXPLAIN语句从本地主机:

id| select_type|table|type |possible_keys |key |key_len|ref    |rows|Extra 
1 | SIMPLE  |names|index|PRIMARY,first |PRIMARY|4  |NULL    |448 |Using where 
1 | SIMPLE  |addr |ref |last   |last |4  |files.names.last |25 |Using where 

从远程主机EXPLAIN语句:

id| select_type|table|type |possible_keys |key |key_len|ref    |rows|Extra 
1 | SIMPLE  |names|range|PRIMARY,first |first |903 |NULL    |955 |Using where; Using temporary; Using filesort 
1 | SIMPLE  |addr |ref |last   |last |4  |files.names.last |25 |Using where 

UPDATE:

Localhost is using mysql version 5.1.46-log. 
Remotehost is using mysql version 5.0.91-log. 
+0

投票转移到ServerFault,因为这是一个系统管理问题,而不是编程问题。 – 2011-01-24 04:12:48

+0

请不要....这是一个MySQL问题比什么都重要。这个板上似乎有更多的mysql专家 – 2011-01-24 04:27:28

+0

比较my.cnf文件以确保远程主机上的配置没有错误。听起来像你已经检查过,但确保remotehost上的addr.id上有一个索引。另外,尝试运行“优化表名”;在远程主机上更新统计信息。你不应该这样做,但我不知道还有什么建议。 – 2011-01-24 05:39:25

回答

0

请发布mysqldump --no-data这两个数据库的输出?可能他们使用不同的语言环境,ISAM类型,不同的选项等。

0

运行SHOW创建每个表TABLE和寻找差异。首先想到的是其中一台服务器启用了InnoDB,另一台服务器不启动,因此存储引擎不同。然后查看my.cnf和SHOW VARIABLES的差异。

它也似乎你在两个数据库中有不同数量的行。这可能会影响计划程序决定在执行查询时使用的索引。

相关问题