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)
我的查询在 columnA
和 columnB
上都有过滤器
在执行计划上,优化器对它们都使用 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'
上的残差谓词丢弃
我的 table 有一个非聚集索引:IX_columnA_columnB
CREATE INDEX IX_columnA_columnB ON table (columnA, columnB)
INCLUDE (xxx)
我的查询在 columnA
和 columnB
上都有过滤器
在执行计划上,优化器对它们都使用 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'