我正在尝试将索引添加到以下查询中。
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的索引。但是,这不起作用,据我所知,执行时间相同。
如何为此查询添加索引,更一般地说,我如何知道将来如何正确添加索引?
答案 0 :(得分:0)
要使用的索引?
- 索引取决于您的需求查询。
- 大多数使用的索引来自你的where子句。
- 使用索引的最佳方法是使用主键。
- 避免为表创建多个索引,因为它可能会使您的数据变得更慢。
醇>
有关详细信息,请参阅此indexes tutorial。