如果我有查询
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
答案 0 :(得分:1)
此查询将强制执行完整的表或索引扫描。无法为允许您进行索引搜索的B or C
方案编制索引。
你可以做的是构建一个(A, D, include B, C)
索引(如果你的数据库支持这个,另一个只构建一个A,D,B,C索引)。然后,您可能只需要索引扫描而不是表扫描,其中索引的顺序已经正确。如果您只使用这些列或仅使用一个或两个其他列来完成查询,尤其如此,该索引可能完全满足查询而无需返回到表中。