读书人

SQL In 话语优化

发布时间: 2012-08-21 13:00:22 作者: rapoo

SQL In 语句优化
sql2000
有表A 主键id ,几十万数据

用 select * A where id in(55,66,77……)

发现cpu 会 20% 多


请教 有什么方法 可以优化

[解决办法]
sql2000 貌似没啥好的解决方案,升级到05或者08吧
[解决办法]
in的语法不能优化了.

按照取值不同,也许可以使用其他语句代替.
[解决办法]
版本的提升,功能的优化,速度随着提升啦。

探讨

引用:

sql2000 貌似没啥好的解决方案,升级到05或者08吧


05 08 如何优化语句呢

[解决办法]
没别的,就是升级硬件和软件!
[解决办法]
把id in(55,66,77……)改成 in=55 or in=66 or in=77 试试
[解决办法]
把in里面的数字,放入临时表试下
[解决办法]
不应该吧,才几十万条记录而已就不行了????升级硬件吧
[解决办法]
用楼上说的,把数字先放入临时表,然后用
select a.* From A a inner join 临时表 b on a.id=b.id

应该可以快2倍以上。
[解决办法]
几十万条数据,执行查询 CPU会20%多?
[解决办法]
探讨

把in里面的数字,放入临时表试下

[解决办法]
有两种方法你可以试试,
1.把in里面的东西放到临时表,再用表关联速度会大幅提升;
2.把in替换成 union all 速度也会快很多,不过用union all sql 会比较长
[解决办法]
查查id上的索引是否被去掉啦。。。
[解决办法]
对看看索引
[解决办法]
都说是索引啊?
[解决办法]
先把(55,66,77.。。。)存放到一张表,临时表或实际表都可以 ,为B表,则语句可写成

select * from A a where exists(select 1 from B b where a.id=b.id)


记住,不要用in ,用exists,才是ok的!
[解决办法]
--in的内容
declare @count varchar(2000)
set @count='111,2222,111,2222'
select * A where id in(
select
substring (value,charindex(',',value)+1,len(value)) as sales
from
dbo.SplitToTable(@count, ','))
[解决办法]
17楼正解

读书人网 >SQL Server

热点推荐