应该创建哪些索引来优化具有多个OR条件的sql查询

Mar*_*rko 6 sql sql-server

我有这样的查询:

SELECT * 
FROM T
WHERE A = @A AND (B=@B OR C=@C OR D=@D OR @E=E)
ORDER BY F
Run Code Online (Sandbox Code Playgroud)

我应该添加哪些索引来提高查询性能?此外,我还需要实现分页,因此这个查询会更复杂.

我的猜测是应该创建四个指数:(A,B,F),(A,C,F),(A,D,F)(A,E,F),但我不确定并且可以'我真的测试它,因为我还没有足够的数据.

有没有人有经验可以分享?谢谢.

u07*_*7ch 4

索引通常不会帮助您处理这种 OR 逻辑。不知道您获得了多少数据或对象的复杂性,我只能主观地说,但使用联合查询对数据进行排序通常会更快。

SELECT * from T
WHERE a= @a  and B= @b
UNION  
SELECT * from T
WHERE a= @a  and c= @c
UNION
SELECT * from T
WHERE a= @a  and d= @d
union
SELECT * from T
WHERE a= @a  and e= @e
Run Code Online (Sandbox Code Playgroud)