sql-server – 如何处理垃圾表?

介绍:

数据库和表规范:

> Microsoft SQL Server 2008 R2
> compatibility_level = 80(不要问为什么)

表规格:

> 3189706行.
> 48列所有varchar为NULL
>没有id,没有索引(只是好玩!)

挑战:

所有这些的目的是清理迁移到干净的桌子.两个表都将存在,直到旧程序学习使用新程序.

我将所有这些放在临时表中以检查类型和null.
然后清除所有重复.由于varchar和没有索引,实际上是不可能的.

CREATE TABLE #TempTrash
(
    ID          INT IDENTITY(1,1),
    Foo         INT,
    Bar         VARCHAR(50)
)

INSERT INTO #TempTrash
(
    Foo,
    Bar
)   
SELECT 
    Foo     = CONVERT ( u.TrashFoo , expression )
    ,Bar    = u.trs_Something
FROM dbo.BurnMe u

-- 3 Search index for duplicate clean
CREATE CLUSTERED INDEX IDX_C_Trash_IdFoo ON #TempTrash(Foo)    
CREATE INDEX IDX_Trash_IdFoo ON #TempTrash(Foo)

由于这将变得很慢,我来找你就这个过程提出一些建议.
以及如何使其尽可能高效.

把它变成蓝色插入?对插入执行convertion和null检查?
插入前添加索引?

Ps:由于48列,我简化了Sql查询.

最佳答案

SELECT 
    Foo     = CONVERT ( u.TrashFoo , expression )
    ,Bar    = u.trs_Something
FROM dbo.BurnMe u

As this is going to be verry slow I came to you for some advice on this process.
and How to make it as efficient as possible.

这样做效率不高,因为您要从表中选择所有数据

如果你想检查数据的有效性而不想改变表,我推荐使用Trigger,如下所示

create trigger trg_test
on table
for insert
as
begin
do your validation here
end

根据评论更新:
如果你想保留两个表,我建议不使用临时表,使用永久表.支付一次性检查所有费用,然后只支付增量费用.这是我唯一能想到的想法

点赞