小编典典

仅对一个匹配项之间的查询建立索引SQL?

sql

我们有一个包含两百万行的表,其中对它的所有查询将是使用Column1和进行之间的查询Column2。同样,将只有一种可能的结果。例如…

Col1     Col2
1        5
6        10
11       15

select * from table1 where 8 between Col1 and Col2

我目前在Col1和上都有一个唯一的聚集索引Col2。到目前为止,我还无法弄清楚如何进一步优化查询和索引,以最大程度地减少所处理的行。执行计划当前报告在查找一个唯一的正确答案时处理了将近0.5行和113k行的成本。

我可能会忽略哪些选择?

根据要求,当前执行计划中的一些详细信息:

Operation
 Clustered Index Seek
Predicate
 CONVERT_IMPLICIT(bigint,[@2],0)<=[Col2]
Seek Predicate
 Seek Keys[1]: End: Col1 <= Scalar Operator(CONVERT_IMPLICIT(bigint,[@1],0))

阅读 180

收藏
2021-03-23

共1个答案

小编典典

我想我找到了答案。我必须首先在Col1上创建一个唯一的聚集索引,然后在Col2上创建一个唯一的非聚集索引。然后必须更新查询以在每个索引上强制查找。

select * from table1 where Col1 = 
    (select max(Col1) from table1 where Col1 <= 8)
and Col2 = 
    (select min(Col2) from table1 where Col2 >= 8)

执行计划现在报告0.0098成本并处理了1行。

2021-03-23