2014-05-08 90 views
1

,如果我有一个查询如何在查询中用'OR'将查询编入索引?

SELECT * FROM tableA where A=10 and (B=20 OR C=30) order by D 

通常我会创建的列的索引,(A,B,C,d),但我不知道这是真的是最好的方式。

对于这个查询,2个索引(A,B,D)和(A,C,D)不会更好吗?

感谢

FFMG

+1

您正在使用哪些DBMS? Postgres的?甲骨文?在任何情况下,在创建索引后查看执行计划并查看使用哪一个。 –

+0

这取决于,我使用mysql和sqlite。 我可能是错的,但在我看来,同样的答案将适用于大多数数据库。 – FFMG

回答

1

这个查询将迫使全表或索引扫描。无法为B or C方案编制索引,这将允许您执行索引查找。

你可以做的是建立一个(A, D, include B, C)索引(如果你的数据库支持这个,其他只是建立一个A,D,B,C索引)。然后,而不是表扫描,也许你只需要索引扫描,索引已经在正确的顺序。如果您只能使用这些列或仅使用一两个查询来完成查询,那么这种情况尤其如此,该索引可能完全满足查询而无需返回表。