加速Insert SQL过程

时间:2014-07-01 02:42:13

标签: sql-server tsql

我需要一些关于调整一些TSQL以便更快执行的提示,虽然它有效,但它耗时太长。这可能是因为我可以在插入之前从另一个表中获取一个键,任何想法都可以吗?

DECLARE db_cursorReads CURSOR FOR SELECT 
        [MeterId]
      ,[MeterRead]
        FROM MdsReadsImports;

declare @PremiseMeterId int;
declare @MeterId nvarchar(24);
declare @MeterRead int; 

OPEN db_cursorReads;
FETCH NEXT FROM db_cursorReads INTO 
      @MeterId
      ,@MeterRead;

WHILE @@FETCH_STATUS = 0  
BEGIN  

    set @PremiseMeterId = (select top 1 PremiseMeterId from PremiseMeters where MeterId = @MeterId)

    insert into PremiseMeterReads (MeterRead,PremiseMeterId)
    values (@MeterRead, @MPremiseMeterId)

    FETCH NEXT FROM db_cursorReads INTO 
     @MeterId
      ,@MeterRead;

END;
CLOSE db_cursorReads;
DEALLOCATE db_cursorReads;

2 个答案:

答案 0 :(得分:1)

首先,我注意到您正在设置但未使用@PremiseMeterID

其次,你好像是这样做的:

insert into PremiseMeterReads (MeterRead, MeterId)
    select MeterRead, MeterId
    from MdsReadsImports;

基于集合的操作应该比使用游标快得多。

答案 1 :(得分:1)

我发现您正在检索PremiseMeterId但未在您发布的脚本中使用它。也许你可以放弃光标并执行一个基于集合的查询:

INSERT INTO PremiseMeterReads (MeterRead,MeterId)
SELECT 
     [MeterRead]
    ,[MeterId]
FROM MdsReadsImports;