我需要一些技巧来调优一些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;发布于 2014-07-01 02:52:23
我看到您正在检索PremiseMeterId,但没有在您发布的脚本中使用它。也许您可以放弃游标,执行一个基于集合的查询:
INSERT INTO PremiseMeterReads (MeterRead,MeterId)
SELECT
[MeterRead]
,[MeterId]
FROM MdsReadsImports;发布于 2014-07-01 02:49:16
首先,我注意到您正在设置但不使用@PremiseMeterID。
第二,你似乎在这样做:
insert into PremiseMeterReads (MeterRead, MeterId)
select MeterRead, MeterId
from MdsReadsImports;基于集合的操作应该比使用游标快得多。
https://stackoverflow.com/questions/24501764
复制相似问题