VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 864|回复: 7

优化求解:上万条带参数的查询语句

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-25 23:40:01 | 显示全部楼层 |阅读模式
手头的一个活,可以简化为以下模型:

declare @i int, @j int, @iCount int
set @i = 0
set @j = 0

while(@i < 100)
begin
    while(@j < 100)
    begin
        set @iCount = (select count(*) from table1 where field1 = @i and field2 = @j)
        if (@iCount <> 0)
        begin
            insert into table2(field1, field2) values(@i, @j)
        end
        set @j = @j +1
    end
set @i = @i +1
end

请问能否通过批量执行或把多条select语句合成一条语句等等方式来达到最佳效率?
回复

使用道具 举报

0

主题

211

帖子

108.00

积分

新手上路

Rank: 1

积分
108.00
发表于 2020-2-16 12:45:01 | 显示全部楼层
--try
declare @i int, @j int, @iCount int
set @i = 0
set @j = 0

while(@i < 100)
begin
    while(@j < 100)
    begin
        insert into table2(field1, field2)
        select @i, @j
        where exists(select 1 from table1 where field1 = @i and field2 = @j)

        set @j = @j +1
    end
set @i = @i +1
end
回复

使用道具 举报

0

主题

126

帖子

73.00

积分

新手上路

Rank: 1

积分
73.00
发表于 2020-2-18 09:45:02 | 显示全部楼层
insert into table2(field1, field2)
select field1,field2 from table1
WHERE field1<100 AND field2<100 GROUP BY field1,field2 HAVING count(1)>0
回复

使用道具 举报

0

主题

16

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-2-18 13:30:02 | 显示全部楼层
楼上正解。
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-5-1 12:00:01 | 显示全部楼层
多谢几位兄弟,其实我的本意是想问一下用临时表、批量执行等方法的优化,因为这个模型太简化了可能不能完全拟真原型,在原型里那个select语句应该是不好合并的,比如下面这种写法:
select count(*) from table1 where field1 = 2*@i and field2 = @j+5
或者
select count(*) from table1 where field1 = 随机数*@i and field2 = 随机数*@j

我想问的是在这种情况下如何优化?多谢大家。
回复

使用道具 举报

0

主题

126

帖子

73.00

积分

新手上路

Rank: 1

积分
73.00
发表于 2020-5-4 18:15:01 | 显示全部楼层
第一种可以转成如下:
insert into table2(field1, field2)
select field1,field2 from table1
WHERE field1<100*2 AND field2<100+5 AND field2>=5
AND field1%2=0
GROUP BY field1,field2
回复

使用道具 举报

0

主题

126

帖子

73.00

积分

新手上路

Rank: 1

积分
73.00
发表于 2020-5-4 20:15:01 | 显示全部楼层
第2种,如果随机数是每次生成的,那就没什么可优化的了!
回复

使用道具 举报

0

主题

126

帖子

73.00

积分

新手上路

Rank: 1

积分
73.00
发表于 2020-5-4 22:00:01 | 显示全部楼层
Group可以去掉。。。
只要有记录,COUNT(*)>0都能满足
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表