MySQL - 我如何知道要使用哪些索引?

时间:2017-03-27 00:09:41

标签: mysql indexing

我正在尝试将索引添加到以下查询中。

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=?);

我的第一个想法是三个索引:一个在perspective_user,timestamp,timestamp_added和convo_id上,一个是关于author,body,timestamp和timestamp_added的第二个索引,另一个是关于perspective_user,identity和timestamp_added的索引。但是,这不起作用,据我所知,执行时间相同。

如何为此查询添加索引,更一般地说,我如何知道将来如何正确添加索引?

1 个答案:

答案 0 :(得分:0)

要使用的索引?

  
      
  1. 索引取决于您的需求查询。
  2.   
  3. 大多数使用的索引来自你的where子句。
  4.   
  5. 使用索引的最佳方法是使用主键。
  6.   
  7. 避免为表创建多个索引,因为它可能会使您的数据变得更慢。
  8.   

有关详细信息,请参阅此indexes tutorial