表连结查询时,clustered index seek 变成clustered index scan了

时间:2021-01-26 19:16:36
有表tab1(a,b,c,d) 在列a,b上有唯一聚集索引,在a上有一个非聚集索引
  表tab2(a,b,c,d) 在列a,b上有唯一聚集索引。

select *
from tab2
where a>0 and a<1001 and b = '273773737'
这个时候的查询是clustered index seek方法查的
但是如果
select *
from tab1
where a>0 and a<1001 and b = '273773737'
union all
select *
from tab2
where a>0 and a<1001 and b = '273773737'
这个时候竟然是index seek 和clustered index scan的混合查询,高手能解释一下吗,谢谢了

8 个解决方案

#1


学习

#2


等高手解释!累了!休息一下

#3


tab1(a,b,c,d) 在列a,b上有唯一聚集索引,在a上有一个非聚集索引 
-----
在a上也做一个非聚集索引?

#4


引用 2 楼 soft_wsx 的回复:
等高手解释!累了!休息一下

我没有试,只有回家再试试看,公司给我配的本本没环境,希望大家能给我解释解释 ,我郁闷了。

#5


引用 3 楼 liangck 的回复:
tab1(a,b,c,d) 在列a,b上有唯一聚集索引,在a上有一个非聚集索引
-----
在a上也做一个非聚集索引?

我没有试,只有回家再试试看,公司给我配的本本没环境,希望大家能给我解释解释 ,我郁闷了。

#6


引用 3 楼 liangck 的回复:
tab1(a,b,c,d) 在列a,b上有唯一聚集索引,在a上有一个非聚集索引
-----
在a上也做一个非聚集索引?

a作为聚集索引的首列,不必单独做非聚集索引了。

#7


按照你的意思,我在自己的机子上做了相关的实验,结果两次查询都是seek,不存在scan。可能是你的统计信息长时间没有更新了,请更新统计信息后,再测试。

#8


引用 7 楼 tjvictor 的回复:
按照你的意思,我在自己的机子上做了相关的实验,结果两次查询都是seek,不存在scan。可能是你的统计信息长时间没有更新了,请更新统计信息后,再测试。

把你的SQL代码粘上来好吗,怎么更新阿  

#1


学习

#2


等高手解释!累了!休息一下

#3


tab1(a,b,c,d) 在列a,b上有唯一聚集索引,在a上有一个非聚集索引 
-----
在a上也做一个非聚集索引?

#4


引用 2 楼 soft_wsx 的回复:
等高手解释!累了!休息一下

我没有试,只有回家再试试看,公司给我配的本本没环境,希望大家能给我解释解释 ,我郁闷了。

#5


引用 3 楼 liangck 的回复:
tab1(a,b,c,d) 在列a,b上有唯一聚集索引,在a上有一个非聚集索引
-----
在a上也做一个非聚集索引?

我没有试,只有回家再试试看,公司给我配的本本没环境,希望大家能给我解释解释 ,我郁闷了。

#6


引用 3 楼 liangck 的回复:
tab1(a,b,c,d) 在列a,b上有唯一聚集索引,在a上有一个非聚集索引
-----
在a上也做一个非聚集索引?

a作为聚集索引的首列,不必单独做非聚集索引了。

#7


按照你的意思,我在自己的机子上做了相关的实验,结果两次查询都是seek,不存在scan。可能是你的统计信息长时间没有更新了,请更新统计信息后,再测试。

#8


引用 7 楼 tjvictor 的回复:
按照你的意思,我在自己的机子上做了相关的实验,结果两次查询都是seek,不存在scan。可能是你的统计信息长时间没有更新了,请更新统计信息后,再测试。

把你的SQL代码粘上来好吗,怎么更新阿