数据库和表格规范:
表格规范:
所有这一切的目的是清理迁移到干净的桌子。两个表都将存在,直到旧程序学习使用新程序。
我会将所有这些放在临时表中以检查类型和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查询。
答案 0 :(得分:1)
SELECT
Foo = CONVERT ( u.TrashFoo , expression )
,Bar = u.trs_Something
FROM dbo.BurnMe u
由于这将变得很慢,我来找你就这个过程提出一些建议。 以及如何使其尽可能高效。
这样效率不高,因为您正在从表中选择所有数据
如果您想检查数据的有效性并且不想更改表格,我建议您使用Trigger
,如下所示
create trigger trg_test
on table
for insert
as
begin
do your validation here
end
根据评论更新:
如果你想保留两个表,我建议不要使用临时表,使用永久表。支付一次性检查所有费用,然后只支付增量费用。这是我能想到的唯一想法