为什么这个MySQL查询在一台服务器上比另一台服务器慢?

时间:2013-01-31 12:25:54

标签: mysql query-optimization mysql-5.1 mysql-5.5

我正在尝试优化SQL查询。有趣的是,在一台MySQL服务器上,查询运行大约0.06秒,我很满意,但在另一台服务器上,查询接近0.2秒(两倍)。

SELECT fo.facets_id, fo.facets_options_id, fo.value
FROM facets_options fo
INNER JOIN categories_facets cf ON cf.facets_options_id=fo.facets_options_id
INNER JOIN categories c ON c.categories_id=cf.categories_id
WHERE fo.facets_id="2"
AND fo.language_id = "1"
AND c.enabled=1
GROUP BY fo.facets_options_id
ORDER BY fo.value ASC;

两台服务器上的“EXPLAIN”输出完全相同:

id          select_type          table  type   possible_keys                                             key               key_len  ref                        rows Extra
1           SIMPLE               fo     ref    PRIMARY,facets_options_id,facets_id,facets_id_2           facets_id         4        const                      986  Using where; Using temporary; Using filesort
1           SIMPLE               cf     ref    PRIMARY,categories_id,categories_id_2,facets_options_id   facets_options_id 4        mydb.fo.facets_options_id  37   
1           SIMPLE               c      eq_ref PRIMARY,enabled                                           PRIMARY           4        mydb.cf.categories_id      1    Using where

查询运行缓慢的服务器使用MySQL 5.1.66,而运行速度快的服务器使用MySQL 5.5.29。

新版本的MySQL是否可能在优化查询方面做得更好?或者还有其他可能导致它的东西?我怎样才能更多地了解幕后发生的事情?

1 个答案:

答案 0 :(得分:2)

我假设您的硬件在两台服务器上都是相同的。

您可以使用分析器查看差异来源。

SET profiling = 1;
SELECT /*yourquery...*/
SHOW PROFILES;
/*lookup the id for your query*/
SHOW PROFILE FOR QUERY 1 /*or whatever id your query has*/

你会得到一份详细的清单,花了多长时间等等......

还有EXPLAIN EXTENDED,您可以使用它查看优化查询。

手册中的一个例子是here

除此之外,差异可能来自不同的MySQL版本。

Percona确实调查了从5.1到5.5的性能改进。结果是here