‘壹’ sql语句in 后面跟的数据过多怎么解决
解决办法,使用临时表:
第一步:创建临时表,并将in内的数据插入到表中
select*into#from(
select'1'numunionall
select'2'unionall
select'3'unionall
.....
select'N'
)a
第二步:执行in查询
select*from表where列in(selectnumfrom#)
第三步:销毁临时表
droptable#
若是连起来写:
setnocounton;select*into#from(select'1'numunionallselect'2'unionallselect'3'unionall.....select'N')a;select*from表where列in(selectnumfrom#);droptable#
‘贰’ sql 语句 in的优化。
假设原来的句子是
select * from t1 where t1.f1 in (select t2.f2 from t2 where t2.f2=xxx)
和你的很类似
你用子查询 很慢
我们现在修改为:
select t1.* from t1 ,t2 where t1.f1 = t2.f2 and t2.f2=xxxx
这里使用了关联查询代替了子查询大大提高效率。
其次你可以考虑在表t1.f1上加索引,提高查询速度。
‘叁’ 怎么优化 where中含有in 的sql
可以把IN换成LEFT JOIN 加上IS NOT NULL 的这种写法 LEFT JOIN 效率比较高
‘肆’ 核销明细查询in条件过多导致sql超时优化
现状:查询条件中in条件包含了400+门店的条件 且是返回全表字段,需要排序+分页查询 优化:(前提,做数据归档) 1.将大量门店查询拆分成 50个门店一次查询 ,且只查询主键id,通过分次查询将查询到的数据汇总(此时数据可能会有上万 但只包含主键id) 2.根据分页条件去其中符合条件的主键id (此时安分页筛选出来的数据一般10-30个) 3.根据筛选出的主键id通过in条件查询符合条件的数据返回‘伍’ Sql语句in后面跟的数据过多如何解决
如果是离散型数据就只能用in了,因为这些数据没有规律,你就只能一项项列出来,让它们都包含到你所要查询的语句里面。
如果是连续型数据就可以不用in了,可以用between...and来替代in,而且这样写一般来说效率要比in高。