/*-------------------
*问题描述:查询条件非常复杂时,怎么提高效率?
*例子:select * from table1 where id in (1,3,6,10,...,8000) and type = 1
*id值可能有数千个之多,这样查询起来非常慢,把id设为主键也很慢,请问有没有什么方法可以快一点?
*解决方法:拆分条件
--------------------*/
--例如:
select * from tb where id in(1,2,3,4,........) and name='best'
--这里的括号里面的数字有将近千个之多的时候,你就可以考虑这样
--1.将括号的条件做成变量
declare @str varchar(4000) set @str='1,2,3,4,5.......'
--2.然后将@s拆分后插入临时表,拆分一个字符串的方法参考:http://blog.csdn.net/feixianxxx/archive/2010/01/27/5263341.aspx
create table #t(
id varchar(10))
declare @i int
declare @len int
set @i = 1
while @i < len(@str+',')
begin
insert #t select substring(@str+',',@i,charindex(',',@str+',',@i)-@i)
set @i = charindex(',',@str+',',@i)+1
end
--3利用临时表和原表进行连接取值
select k.* from tb k
inner join #t p on p.id = k.id
where name='best'