0

我有一个包含 900 万条记录的表,我需要遍历每一行,并且需要在每次迭代中插入多个表。

我的示例查询是

//this is the table with 9 million records
create table tablename
(
   ROWID INT IDENTITY(1, 1) primary key ,
    LeadID int,
Title varchar(20),
FirstName varchar(50),
MiddleName varchar(20),
Surname varchar(50)
)


declare @counter int
declare @leadid int
Declare @totalcounter int

set @counter = 1
Select @totalcounter = count(id) from tablename
while(@counter < @totalcounter)
  begin
     select @leadid = leadid  from tablename
     where ROWID = @counter

     --perform some insert into multiple tables
     --in each iteration i need to do this as well
     select * from [sometable] 
       inner join  tablename where leadid = @leadid

      set @counter = @counter + 1
   end

这里的问题是这花费了太长时间,尤其是每次迭代的连接。

有人可以帮我优化这个。

4

2 回答 2

0

是的,您的连接需要很长时间,因为您的两个表之间没有指定连接条件,因此您正在创建笛卡尔积。这肯定需要一段时间。

如果你想优化这个,指定你想加入这些表的内容。

如果它仍然很慢,请查看适当的索引。

于 2013-11-15T11:22:41.507 回答
0

看起来您正在尝试查找与?中的行sometable相同leadid的所有行 tablename如果是这样,一个简单的连接应该可以工作

select t2.*
from tablename t2 inner join sometable t2
     on t1.leadid=t2.leadid

只要你有一个关于 leaid 的索引,你就不应该有任何问题

你真正想做什么?

于 2013-11-15T11:24:59.970 回答