gpt4 book ai didi

sql-server - 删除大量行

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

我想根据这个标准(返回> 1亿条记录)从表1中删除记录(行> 3亿条记录):列 1 为空,列 2 为空,列 3 为空,列 4 为空,列 5 为空,列 6 为空,列 7 为空

表定义:

CREATE TABLE [dbo].[Table1](
[ID] [uniqueidentifier] NOT NULL,
[Column1] [float] NULL,
[Column2] [float] NULL,
[Column3] [float] NULL,
[Column4] [float] NULL,
[Column5] [float] NULL,
[Column6] [float] NULL,
[Column7] [float] NULL,
[Table2ID] [uniqueidentifier] NULL,
PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

注意:Table2ID是Table2的外键约束

CREATE TABLE [dbo].[Table2](
[ID] [uniqueidentifier] NOT NULL,
[Column1] [date] NULL,
[Column2] [tinyint] NULL,
[Column3] [tinyint] NULL,
CONSTRAINT [PK_Table2_ID] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

我还想删除表 2 中不再被表 1 引用的所有孤立记录(行数约为 1000 万条记录)。以下是我采用的方法:

一个。使用 Table1ID 和 Table2ID 列创建临时表 #table1。捕获所有相关的 Table1ID 并运行以下删除查询。

Delete from Table1 where ID in (select Table1ID from #table1)

Delete from Table2 where ID in (select Table2ID from #table1)

上述查询可能由于表扫描而花费大量时间。

一切都与上面相同,但在 #table1 中的 Table1ID 列上创建唯一聚集索引并在 Table2ID 上创建唯一索引并运行以下查询:

Delete from Table1 t1 join #table1 tmp1 on t1.ID=tmp1.Table1ID

Delete from Table2 t2 join #table1 tmp1 on t1.ID=tmp1.Table2ID

有没有更好的方法来处理这种情况?从 Table1 和 Table2 中删除记录的最佳方法是什么?

注意:我知道我们创建新表、转储所有相关数据并重命名的方法。请提供有关替代方法的建议 - 优缺点。

最佳答案

因为你确实想删除高百分比,所以你可以考虑这种方法

 SELECT col1, col2, ... INTO #SomeHoldingtable
FROM MyTable WHERE ..condition..

TRUNCATE TABLE MyTable

INSERT MyTable (col1, col2, ...)
SELECT col1, col2, ... FROM #SomeHoldingtable

关于sql-server - 删除大量行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17524235/

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