2016-12-12 58 views
0

データベースのクエリ速度をテストするときに、何か変わったことに気付きました。私は2つのクエリを持っています。MySQLはリピートクエリを自動的に最適化しますか?

SELECT * 
FROM `event_history` 
WHERE `event_details` LIKE '%joe submitted order%' 

SELECT * 
FROM `event_history` 
WHERE `event_details` LIKE '%bob submitted order%' 

最初のものは、アプリケーションによって頻繁に実行されます。もう1つは、私が手動で一度だけ実行したものです。私は最初のものが0.0035秒しか走らなかったことに気付きましたが、2回目は約0.2500秒かかりました。これは予期せぬことです。

MySQLはこのクエリをどうにか最適化していますか?もしそうなら、私はこれを設定することができます。例えば、それを実稼働させる前に2番目のクエリを最適化する方法はありますか?

+0

そのような最適化は行われません。ただし、クエリ/データベース構造を自分で最適化しないと、大きな違いが生じる可能性があります。したがって、クエリで使用される列に適切なインデックスを設定しなかった場合これは、一見等しい照会の違いを説明することができます。 – arkascha

+0

@arkascha IDを増分するプライマリインデックスを持つシンプルなテーブルです。 – Goose

+0

これはあなたのidexが正しく設定されていないことを意味します。 'event_details'カラムで選択するので、あなたは間違いなくそのカラムのインデックスを作成する必要があります!また、 'LIKE'演算子は他のすべてのオプションと比較して非常に遅いと考えるべきです。そのような高価なクエリを回避する方法はありませんか? – arkascha

答えて

4

MySQLはクエリ結果キャッシュを実装しています。これは確かにあなたが見るものを説明することができます。なぜなら、頻繁に実行されるクエリが最初に実行するクエリよりも速く返ってくると報告しているからです。

詳細はこちらをご覧ください: http://dev.mysql.com/doc/refman/5.7/en/query-cache.html

+0

ほとんどの実動システムでは、QCを無効にする方が効果的です。 _テーブルのすべての変更は、そのテーブルの_all_エントリをQCから削除します。 –

関連する問題