2017-03-27 14 views
0

次のクエリにインデックスを追加しようとしています。 perspective_user、タイムスタンプ、timestamp_added、およびconvo_id上の1つ、著者、ボディ、タイムスタンプ、およびtimestamp_added上の第2の指標、及びperspective_user、アイデンティティ、およびtimestamp_addedの最終インデックス: MySQL - 使用するインデックスはどのように知っていますか?

SELECT * FROM Messages t WHERE perspective_user=? and timestamp BETWEEN ? AND ? AND 
timestamp_added = 
(select max(timestamp_added) from Messages t2 
where 
t2.author = t.author AND 
t2.body = t.body AND 
t2.timestamp = t.timestamp AND 
t2.timestamp_added <= ? 
) AND convo_id IN(SELECT convo_id FROM Conversations WHERE perspective_user=? AND identity=? AND timestamp_added=?); 

は、私が最初に考えたのは3つのインデックスでした。しかし、これはうまくいかず、わかる限り、実行には同じ時間がかかります。

このクエリにインデックスを追加するにはどうすればよいですか、より一般的には、後でそれらを正しく追加する方法をどのように知っていますか?

+0

'explain select ... 'でクエリを別々に実行して、実行方法を確認します –

+0

クエリではなくテーブルにインデックスを追加します – efekctive

+0

この質問はhttp://stackoverflow.com/questionsの一部ではありません/ 43023274/mysqlの考え方は何ですか?インデックスは使用するかどうか、期待どおりに動作しますか?私はそこでインデックスの質問に対処しました。 –

答えて

0

インデックスを使用しますか?

  1. インデックスは、必要なクエリによって異なります。
  2. インデックスの大部分は、where句からのものです。
  3. プライマリキーを使用するのに最適なインデックスが1つあります。
  4. 多くのインデックスをテーブルに作成しないようにすると、データのクエリが遅くなる可能性があります。

詳しくはindexes tutorialを参照してください。

関連する問題