SQL 服务器 - 同一列上的谓词和查找谓词

SQL Server - Predicate and Seek Predicate on the same column

我的 table 有一个非聚集索引:IX_columnA_columnB

CREATE INDEX IX_columnA_columnB ON table (columnA, columnB)
    INCLUDE (xxx)

我的查询在 columnAcolumnB 上都有过滤器 在执行计划上,优化器对它们都使用 seek predicate,但我看到 columnB 再次出现在 predicate 中 我不知道这个案子。有人可以帮忙吗?非常感谢

您的查询谓词类似于

recommend Between 179764 and 26506209 and winlostdate >= '2017-07-12'

索引的逻辑顺序如下。

+-----------+-------------+------+----------+
| recommend | winlostdate | Seek | Residual |
+-----------+-------------+------+----------+
|    179764 | 2000-01-01  |      |          |
|    179764 | 2017-07-12  | Y    | Y        |
|    179765 | 2000-01-01  | Y    | N        |
|    179765 | 2017-07-12  | Y    | Y        |
|  26506209 | 2000-01-01  | Y    | N        |
|  26506209 | 2017-07-12  | Y    | Y        |
|  26506210 | 2000-01-01  |      |          |
+-----------+-------------+------+----------+

seek谓词有起始谓词(recommend, winlostdate) >= (179764, '2017-07-12'),按顺序读取索引,直到达到结束条件,recommend <= 26506209不为真

这是上面Seek=Y的连续范围。

但是,该范围包括两行,它们在所有方面都不匹配谓词。这些被 winlostdate >= '2017-07-12'

上的残差谓词丢弃