gpt4 book ai didi

sql - 不断增加的 INSERT 时间到表中

转载 作者:行者123 更新时间:2023-12-04 18:27:47 27 4
gpt4 key购买 nike

我有 30 个数据表正在运行查询,然后将查询结果插入到一个主表中。对 30 个表中的每一个的查询将返回 2-3 百万行,因此到查询结束时,表本身应该有大约 6000 万行。

我分别执行每个查询,在批处理脚本中一次一个,每个查询都有自己的事务,并在插入后提交,因此事务日志应该没有问题。

我发现随着越来越多的数据被插入到表中,插入时间也在增加,从前几个表的大约 5 分钟到第 20 个表的 2 多个小时。我想弄清楚这是为什么。

我的查询本质上是:

insert into maintable <columns>
select <columns> from table1

查询比那复杂一点,但我不认为查询是问题所在。我已经测试了查询,如果我不进行插入,它们会在几分钟内返回,所以这不应该是问题所在。我还测试了将结果插入一个 temptable,这只需要几分钟,然后使用对 temptable 的选择插入到 maintable,这同样需要几个小时。

在我插入的主表上,我删除了聚簇索引,所以它只有一个索引,所以这应该不是问题。

谁能告诉我需要寻找什么来诊断问题所在?

有一件事是它位于 VMWare VM 上,并且数据库位于同一数据存储上。这可能是个问题吗?

更新:

主表的创建语句如下:

CREATE TABLE [dbo].[dow30_1s](
[id] [bigint] IDENTITY(1,1) NOT NULL,
[symbol] [varchar](20) NOT NULL,
[transactionTime] [datetime] NOT NULL,
[openPrice] [decimal](20, 8) NOT NULL,
[highPrice] [decimal](20, 8) NOT NULL,
[lowPrice] [decimal](20, 8) NOT NULL,
[closePrice] [decimal](20, 8) NOT NULL,
[vol] [int] NOT NULL
) ON [PRIMARY]

CREATE NONCLUSTERED INDEX [dow30_1s_tt] ON [dbo].[dow30_1s]
(
[transactionTime] ASC
)
INCLUDE ( [closePrice],
[vol]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF,
IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

最佳答案

transactionTime 上删除索引。 感觉统计数据没有更新(随着表变大运行速度变慢)...不确定这是罪魁祸首还是您的数据广泛分散并在每次插入 2-3 百万时维护索引rows 使 sql server 停滞不前。 好消息是,在完成所有记录的插入之前,您不需要该索引,因此只需删除它即可。

关于sql - 不断增加的 INSERT 时间到表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8996673/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com