在SQL中加入或过滤

Art*_*rtK 0 sql t-sql sql-server

鉴于10万记录表中哪两个会更快搜索?

create table #SearchSet(Item varchar(10))
insert into @SearchSet(Item)
values(('AA'),('BB'),('CC'),('DD22'),('AC123'),('456AA'),('125AA15'),('A154A'),('DDSSAA'),('55KKAA'))

select t1.*
from Table1 as t1
join #SearchSet as s
on t1.Column1 = s.Item

drop table #SearchSet
Run Code Online (Sandbox Code Playgroud)

或这个

select *
from Table1
where ColumnA = 'AA' or ColumnA = 'BB' or ColumnA = 'CC' or ColumnA = 'DD22' or ColumnA = 'AC123'
or ColumnA = '456AA' or ColumnA = '125AA15' or ColumnA = 'A154A' or ColumnA = 'DDSSAA' or `ColumnA = '55KKAA'`
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

真正回答性能问题的唯一方法是测试环境中的不同版本.

比较的值很少(只有10),我希望该where子句能更好地工作.另外,在编写查询时,它无法利用索引,这可能真正有助于第一个版本.

如果添加索引,那么第一个可能与第二个竞争.试着这样做:

create table #SearchSet(Item varchar(10) primary key);
insert into @SearchSet(Item)
    values(('AA'),('BB'),('CC'),('DD22'),('AC123'),('456AA'),('125AA15'),('A154A'),('DDSSAA'),('55KKAA'));
Run Code Online (Sandbox Code Playgroud)

如果您要比较数百或数千个值,我希望带有主键的临时表更快.