SELECT product_id FROM inventories
INTERSECT
SELECT product_id FROM order_items;
SELECT product_id FROM inventories T1
inner join order_items t2 on T1.product_id = T2.product_id;
答案 0 :(得分:0)
出于好奇,我做了一些测试
<强>要点:强>
1.当查询成本和执行时间作为参数时,如果没有索引,则set query略有效
2.当查询成本,读取次数,执行次数作为参数时,索引设置选项比基于连接的查询有效
演示脚本:
drop table #test2
create table #test1
(
id int
)
create table #test2
(
id int
)
insert into #test1
select * from numbers
insert into #test2
select * from numbers where id>10
set statistics io on
create index nxc on #test1(id)
create index nxc2 on #test2(id)
select id from #test1
intersect
select id from #test2
select
* from
#test1 t1
join
#test2 t2
on t1.id=t2.id
多次执行两次查询:
使用索引
根据阅读次数查询费用:
表'#test2 ______________________________________________________________________________________________________________ 000000000028'。扫描计数1,逻辑读取2239,物理读取0,预读取读取0,lob逻辑读取0,lob物理读取0,lob预读读取0。 表'#test1 ______________________________________________________________________________________________________________ 000000000027'。扫描计数1,逻辑读取2239,物理读取0,预读读取0,lob逻辑读取0,lob物理读取0,lob预读读取0。
查询2:使用联接
表'#test2 ______________________________________________________________________________________________________________ 000000000028'。扫描计数5,逻辑读取1609,物理读取0,预读取读取0,lob逻辑读取0,lob物理读取0,lob预读读取0。 表'#test1 ______________________________________________________________________________________________________________ 000000000027'。扫描计数5,逻辑读取1610,物理读取0,预读取读取0,lob逻辑读取0,lob物理读取0,lob预读读取0。
更改连接查询以使用maxdop 1和合并连接提示会导致两个查询的读取次数相同,但是当两者并行执行时,使用set选项的查询仅占总成本的3%。
注意:强>
生成的测试和执行计划取决于我的系统基于几个因素