我有一个要优化的 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 是否可能在优化查询方面做得更好?还是有其他原因可能导致它?我怎样才能更多地了解幕后发生的事情?