相同的数据库但解释结果不同

时间:2011-01-24 04:06:31

标签: mysql

我有2个数据库:localhost&远程主机。 Localhost似乎运行良好并快速获得我的结果(远低于1秒......感谢此板的帮助)。使用mysqldump,我将localhost转储到remotehost,包括表结构,索引和&数据。我希望remotehost是localhost的虚拟副本,但是当我在remotehost上运行我的查询时,他们需要> 1分钟执行。解释性陈述甚至是不同的......存在许多差异,包括将“类型”更改为“范围”以及使用的索引等。

(其中一些可能通过强制它使用PRIMARY索引来解决,但我宁愿找到问题的根源并理解为什么remotehost的行为不同)

我的陈述:

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
来自localhost的

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

来自remotehost的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

更新:

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

2 个答案:

答案 0 :(得分:0)

在每个表上运行SHOW CREATE TABLE并查找差异。首先想到的是其中一个服务器启用了InnoDB而另一个没有,因此存储引擎是不同的。然后查看my.cnf和SHOW VARIABLES以了解差异。

在两个数据库中,您似乎也有不同的行数。这可能会影响规划器决定在执行查询时使用的索引。

答案 1 :(得分:0)

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