我有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.
答案 0 :(得分:0)
在每个表上运行SHOW CREATE TABLE并查找差异。首先想到的是其中一个服务器启用了InnoDB而另一个没有,因此存储引擎是不同的。然后查看my.cnf和SHOW VARIABLES以了解差异。
在两个数据库中,您似乎也有不同的行数。这可能会影响规划器决定在执行查询时使用的索引。
答案 1 :(得分:0)
请为这两个数据库发布mysqldump --no-data
输出?可能他们使用不同的语言环境,ISAM类型,不同的选项等?