【发布时间】:2015-12-01 10:47:58
【问题描述】:
我的设备不断发送一些数据,我将其保存到数据库中。我正在寻找快速的方法。现在数据被发送到 msmq,然后我进行了多次插入,但是时间太长了。我正在等待插入数据记录,获取 ID,然后在 DataAttachment 中插入相关记录。架构如下所示:
CREATE TABLE [dbo].[Data](
[ID] [int] IDENTITY(1,1) NOT NULL,
[IDDevice] [int] NOT NULL,
[Time] [datetime] NOT NULL,
[Value] [varchar](20) NOT NULL,
...
)
CREATE TABLE [dbo].[DataAttachment](
[IDData] [int] IDENTITY(1,1) NOT NULL,
[AttachmentType] [int] NOT NULL,
[FileName] [datetime] NOT NULL,
[FileContent] [varchar](20) NOT NULL
)
我正在考虑准备多个插入,在每个插入数据之后我会获得最后插入的 id,并使用它来插入附件。但我认为这不是一个好主意,如果已经插入另一个表,我会得到错误的 ID。
另一个选项是从时间和值生成一个哈希值,它可以插入到数据附件和数据中。然后可以在 Data 和 DataAttachment 中插入多个数据而不会出现问题,然后我只需通过哈希值搜索 Data 来更改 DataAttachment 中的 IDData。
我想请教一下如何快速插入。
【问题讨论】:
-
您可以从设备本身同步数据。添加新列,其中将同步
Data和Attachment之间的 ID。对于更胖的插入,您可以使用 2 个临时表。您可以尝试使用 BULK insert(虽然我不知道您是否可以在您的设备上使用它)。之后使用验证程序,您可以快速插入主表。 -
逐行插入是非常缓慢的过程。您必须尝试使用基于集合的方法(SQL 数据库的原生方法)。添加有关您正在使用的设备的更多详细信息 - 类型、操作系统等。
-
你需要一个外键。
标签: sql-server database auto-increment sql-insert