【发布时间】:2010-12-07 15:34:44
【问题描述】:
这是我们当前的表格
CREATE TABLE Visitor
(
VisitorID bigint,
DayPhone varchar(50),
NightPhone varchar(50)
)
我想将此数据迁移到单独的表中:
CREATE TABLE VisitorPhone
(
VisitorID bigint,
Label varchar(50), --Day, Night, Work, Cell, etc.
Phone varchar(50)
)
我的想法是最有效的方法是这样做:
INSERT INTO VisitorPhone(VisitorID, Label, Phone)
SELECT VisitorID, 'day', DayPhone FROM dbo.Visitor WHERE DayPhone IS NOT NULL AND DayPhone <> ''
INSERT INTO VisitorPhone(VisitorID, Label, Phone)
SELECT VisitorID, 'night', NightPhone FROM dbo.Visitor WHERE NightPhone IS NOT NULL AND NightPhone <> ''
我还有哪些其他选择?我们已经讨论了 Sql CLR 函数、临时表、ADO.NET 等所有内容。真正最有效的方法是什么?请记住,DayPhone 和 NightPhone 不是索引的一部分,而且我有 16MM+ 的访问者记录,这相当于 ~16MM - ~32MM VisitorPhone 记录之间的某个位置。
【问题讨论】:
-
为什么不用整数列而不是 varchar 标签?如果你有这么多的记录,一个 int 会更小更快……而 varchar(50) 用于电话号码?这不是有点悲观吗?
-
我对如何存储数据的反馈不感兴趣,而是对如何迁移数据感兴趣。
-
迁移数据有很多不同的方法,包括您提到的那些以及 SSIS。您可以分析所有这些并找到最佳方法,但我猜分析会比迁移花费更长的时间,我进一步猜测您上面显示的 INSERT 语句将是最快的方法。
-
SQL语句中的case语句,也许吧?
-
您要求最有效的方法来执行此操作。如果选择错误的数据类型,您将无法获得最有效的方法。这就是我问的原因。否则您的查询几乎是最快的方式
标签: sql performance sql-server-2008 migration