1

最適化しようとしているSQLクエリがあります。興味深いことに、あるMySQLサーバーでは、クエリは約0.06秒で実行されます。これは私が満足していることですが、別のサーバーでは、クエリは0.2秒近く(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

クエリの実行速度が遅いサーバーはMySQL5.1.66を使用しており、クエリの実行速度が速いサーバーはMySQL5.5.29を使用しています。

新しいバージョンのMySQLは、クエリを最適化するためのより良い仕事をしている可能性がありますか?それとも、それを引き起こしている可能性のある他の何かがありますか?舞台裏で何が起こっているのかをもっと知るにはどうすればよいですか?

4

1 に答える 1

4

あなたのハードウェアは両方のサーバーで同じだと思います。

違いがどこから来ているのかをプロファイラーで確認できます。

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、最適化されたクエリを確認できるがあります。

例はここにマニュアルにあります。

それとは別に、違いは異なるMySQLバージョンに由来する可能性があります。

Perconaは、5.1から5.5へのパフォーマンスの向上を調査しました。結果はこちらです。

于 2013-01-31T14:36:57.550 に答える