我有一个包含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
这里的问题是这花费的时间太长,尤其是每次迭代时的连接。
有人可以帮我优化一下。
答案 0 :(得分:0)
是的,您的加入时间很长,因为您的两个表之间没有指定连接条件,因此您正在创建笛卡尔积。这肯定需要一段时间。
如果你想优化它,请指明你想要加入这些表的内容。
如果仍然很慢,请查看相应的索引。
答案 1 :(得分:0)
您好像在尝试查找sometable
中与leadid
中的行具有相同tablename
的所有行?如果是这样,一个简单的连接应该起作用
select t2.*
from tablename t2 inner join sometable t2
on t1.leadid=t2.leadid
只要你有一个leaid索引你就不会有任何问题
你真的想做什么?