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

应该创建哪些索引来优化具有多个或多个条件的sql查询,sql,sql-server,Sql,Sql Server,我有这样一个问题: SELECT * FROM T WHERE A = @A AND (B=@B OR C=@C OR D=@D OR @E=E) ORDER BY F 我应该添加哪些索引来提高查询性能?此外,我还需要实现分页,这样这个查询将更加复杂 我的猜测是应该创建四个指数:(A,B,F),(A,C,F),(A,D,F)(A,E,F),但我不确定,也不能真正测试它,因为我还没有足够的数据 有人有经验分享吗?谢谢。索引通常对这种逻辑没有帮助,或者不知道要获取多少数据或对象的复杂性,我只能主

我有这样一个问题:

SELECT * 
FROM T
WHERE A = @A AND (B=@B OR C=@C OR D=@D OR @E=E)
ORDER BY F
我应该添加哪些索引来提高查询性能?此外,我还需要实现分页,这样这个查询将更加复杂

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


有人有经验分享吗?谢谢。

索引通常对这种逻辑没有帮助,或者不知道要获取多少数据或对象的复杂性,我只能主观地说,但使用联合查询对数据进行排序通常更快

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

覆盖指数应该可以

created nonclustered index ([IDX_Cover])
on dbo.Table (columns to select)
include (columns in where clause)

请记住,select*不容易索引。在Oracle中,您可以使用位图索引,只需创建5个单独的索引(在A、B、…)即可覆盖它们的所有组合。它最适合于低基数列(即可能值的数量非常有限,如性别和颜色)。试着在谷歌上搜索类似smth的
ms sql替代oracle位图索引
。希望对你有帮助。所以,要小心;索引可能会减少触发SELECT查询所需的时间,但也会大大增加插入所需的时间。这是我们以前必须在生产数据库中处理的问题。我只是想告诉你同样的事情注意,UNION会删除重复项,所以你的方法可能是缓慢的,这是一个有效的观点;这复制了原始查询的功能,索引比or方法更加谨慎。根据我对高数据流失数据库的经验,联合方法比大型覆盖索引更有效,因为创建和删除行的索引成本太高。谢谢。还有一件事,如果存在单独的索引,SQL Server是否知道如何在“或”查询中使用它们,或者我必须使用“联合”查询?
select*不容易索引
?使用什么索引的问题取决于where子句,而不是select子句。