加速插入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;

我看到你正在检索PremiseMeterId,但没有在你发布的脚本中使用它。也许您可以放弃游标并执行单个基于集合的查询:

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

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

第二,你似乎在这样做:

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

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

最新更新