我的表有一个非聚集索引:IX_columnA_columnB
CREATE INDEX IX_columnA_columnB ON table (columnA, columnB)
INCLUDE (xxx)
我的查询已对columnA
和columnB
进行过滤
在执行计划中,优化程序对它们使用seek predicate
,但我在columnB
中再次显示predicate
我不知道这个案子。有人可以帮忙吗?非常感谢
答案 0 :(得分:2)
您的查询谓词类似于
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 | | |
+-----------+-------------+------+----------+
搜索谓词的起始谓词为(recommend, winlostdate) >= (179764, '2017-07-12')
,并按顺序读取索引,直到达到最终条件且recommend <= 26506209
不为真。
这是Seek = Y的连续范围。
但是,该范围包括两行与谓词不匹配的行。这些被winlostdate >= '2017-07-12'