sql - 为什么我的查询不可搜索

标签 sql sql-server performance sql-server-2008-r2

我有一个很奇怪的问题。

我在 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/

相关文章:

sql - 从不完整的数据返回结果?

php - 计数表中的成员数不能超过一个

c# - ADO.NET 中的连接异常

sql - 将单个 SQL Server 表中的行与其他行进行比较

performance - MongoDB的奇怪插入时间

mysql - 将双重嵌套查询转换为 JOIN 语句,以及其他优化

sql - hierarchyid适合频繁插入叶子节点的大树吗?

c# - 从组合框 C# 表单发送文本作为 SQL 过程的输入

javascript - JQuery - Is() 函数优化

mysql - 使用复合索引优化查询,即使用where