我有一个很奇怪的问题。
我在 SQL Server 2008 R2 中运行了这样的查询:
SELECT TOP (20) *
FROM MyTable
WHERE a = 0
AND b = 0
AND c = 0
在 MyTable 上使用我的索引
但这个不是:
SELECT TOP (20) *
FROM MyTable
WHERE a = 0
OR b = 0
OR c = 0
我想在我的程序中执行第二个查询。如何更改第二个查询以使用索引?
索引是:
CREATE NONCLUSTERED INDEX [MyIndex] ON [dbo].[MyTable] (
[a] ASC,
[b] ASC,
[c] ASC
)
WITH (
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
IGNORE_DUP_KEY = OFF,
DROP_EXISTING = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY]
最佳答案
您不能将那个索引用于在条件之间具有 or
的查询。试想一下:任何一个值都可以匹配,因此索引匹配不能保证没有其他记录匹配该条件。
这真的就像运行单独的搜索然后将它们匹配在一起。
关于sql - 为什么我的查询不可搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19652728/