介绍:
数据库和表规范:
> 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
根据评论更新:
如果你想保留两个表,我建议不使用临时表,使用永久表.支付一次性检查所有费用,然后只支付增量费用.这是我唯一能想到的想法