我正在处理数据(“事件”)并将结果插入表格以进行报告。数据是批量插入的,所以我使用的是存储过程。
各种事件类型具有公共和特定字段,因此 INSERT 语句如下所示:
INSERT INTO [Event](EventID, ...) VALUES(@EventID, ...)
INSERT INTO [FileEvent](EventID, ...) VALUES(@EventID, ...)
Event 和 FileEvent 之间是 1:1 的关系。
EventID 过去由原始数据提供。最近,我不得不将 EventID 列修改为 IDENTITY 列(原始数据中的 EventID 重复,因此不能再将其用作输入)。INSERT 语句现在看起来像这样:
INSERT INTO [Event](...) VALUES(...)
declare @EventID int
SET @EventID = SCOPE_IDENTITY()
INSERT INTO [FileEvent](EventID, ...) VALUES(@EventID, ...)
这工作正常,但我可以看到在批处理过程中插入数据时性能明显下降。例如,我提供 ID 的 INSERT 在 15 分钟内完成,其中使用 IDENTITY 和 SCOPE_IDENTITY() 的 INSERT 在 18 分钟内完成。
授予 SQL 服务器有更多工作要做(组成新 ID 等),但我是否以低效的方式获取 ID?有没有更有效的方法来插入两个表?