最適化したいSELECT
ステートメントがあります。最適化によるmysql-orderは、場合によってはインデックスを使用してORDER BY
. 具体的には次の点です。
キーの連続しない部分で ORDER BY を使用します
。 SELECT * FROM t1 WHERE key2=constant ORDER BY key_part2;
こういうこともあるんだな、と思わせてくれます。次のインデックスを使用しています。
UNIQUE KEY `met_value_index1` (`RTU_NB`,`DATETIME`,`MP_NB`),
KEY `met_value_index` (`DATETIME`,`RTU_NB`)
次の SQL ステートメントを使用します。
SELECT * FROM met_value
WHERE rtu_nb=constant
AND mp_nb=constant
AND datetime BETWEEN constant AND constant
ORDER BY mp_nb, datetime
- インデックスを削除して、
met_value_index1
新しい順序で作成するRTU_NB
だけで十分でしょうか?MP_NB
DATETIME
- RTU_NB を
ORDER BY
句に含める必要がありますか?
結果: @meriton が提案したものを試し、 index を追加しました
met_value_index2
。SELECT
1.2 秒後に完了しましたが、以前は 5.06 秒後に完了していました。以下は質問に属していませんが、補足として: 他のいくつかの試行の後、エンジンを MyISAM から InnoDB に切り替え、rtu_nb, mp_nb, datetime
主キーを使用して、0.13 秒後にステートメントが完了しました!