2017-09-12 9 views
0

私は動的フィールドにグループを適用しています どのmysqlシステム変数が速度を上げますか?どのmysqlシステム変数がgroup by節に影響しますか?

は、例えば:tmp_table_sizeまたはmax_heap_table_sizeや他の...

私のテーブルサイズ700メガバイトであると説明し、私は、「インデックスの条件を使用して、一時的な使用; filesortレコードの使用」を与え

私のクエリは以下の通りですが。

SELECT 
     IF(
     flag IN ('A', 'B') 
     'featured', 
     'normal' 
    ) AS package, 
     IF(
     flag2 = 'A', 
     'group1', 
     'group2' 
    ) AS group_num, 
     COUNT(*) AS total 
    FROM 
     mytable 
    WHERE publish = 1 
     AND status IN ('on', 'deleted', 'expired',) 
    GROUP BY customized_flag, 
     agency_package_status ; 
+1

実行速度に影響するシステム変数がいくつかありますが、最も重要な要素はインデックスです。だから1つを追加します。例えば。 'mytable(customized_flag、agency_package_status、publish、status)'または 'mytable(publish、customized_flag、agency_package_status)'などのようなものです(データコンテンツに少し依存します)。また、 'customize_flag、agency_package_status'の値が' flag'や 'flag2'の値が異なるグループに複数の行がある場合、' package'と '' pack_status'を計算するためにどちらの値を使うべきかは不明です。 'group_num'。 (MySQLはランダムな行を使用します)。 – Solarflare

+0

システム変数を最後の手段以外で探すべきではありません。クエリのパフォーマンスが遅い理由は、ほとんどの場合、クエリ自体、またはそれが依存している(存在しない可能性のある)インデックス内に見つかる可能性があります。 – EJP

答えて

1

かもしれないスピードアップクエリが

であることを唯一のもの3210

これは、700MBの小さなサブセットにフィルタリングされる可能性があります。

あなた GROUP BYが壊れている - customized_flagまたは agency_package_statusのいずれかに依存するように表示されませんので、あなたが出力に group_numのための「予測できない」の値を取得します。

関連する問題