我正在构建一个查询,最新步骤涉及添加一个SELECT COUNT(*) FROM [modification]
子句以允许我检测查询的最后一行,但这会破坏性能:
SELECT CONCAT(
IIF(row_number() OVER (ORDER BY forecastId) % 50000 = 1,
CONCAT('INSERT INTO modification (userId, epochTime, ',
'forecastId, description, auxText, auxDate) VALUES ('),
' ('),
userId, ',',
epochTime, ',',
forecastId, ',',
'''', dbo.encode4MySql(description), ''',',
'''', dbo.encode4MySql(auxText), ''',',
'''', CONVERT(VARCHAR(20), auxDate, 120), ''')',
IIF(row_number() OVER (ORDER BY forecastId) % 50000 = 0
OR row_number() OVER (ORDER BY forecastId) =
(SELECT COUNT(*) FROM modification),
'; COMMIT;', ','))
FROM modification
ORDER BY forecastId;
如果你看不到我在做什么,我一次构建INSERT () VALUES (),(),(),...
50000 行的语句。
请限制对评论的完全替代方法的建议。我正在寻找一种方法来在这里找到最后一个行号,而不会大大降低查询速度 - 它确实如此。
我对查询计划不是很熟悉,但如果有帮助可以在这里发布一个。我在这里的相关问题中尝试了很多东西,但没有什么可以开始工作。