我有一个150列的表。他们中的大多数是nvarchar(100) null
类型,有些是decimal(20,7) null
例:
Create table myTable
(
ID bigint (PK),
Col1 Nvarchar(100) null,
Col2 Nvarchar(100) null,
Col3 Nvarchar(100) null,
....
Col150 nvarchar(100) null
)
当我插入时,我只插入20列。当我尝试插入1或2百万条记录时,需要花费很多时间(> 32gb ram> 1分钟)
当我将相同数量的记录插入临时表时,只需1-2秒。
我也尝试删除主键但结果是一样的。如何加速插入具有大量空nvarchar
列的表?
由于你有很多空列我建议使用XML作为列类型,如果可能的话创建表myTable(ID bigint(PK),Col1 XML)
这将在您解释的情况下提高您的表现。由于使用xml是一个更大的主题,你可以阅读更多here
说到设计,这显然不是最好的做法,有数百个可以为空的列,大多数时候都是空的。
所以,我可以说:
如果您可以重新设计表格,您可以:
如果您没有任何选择,您可以:
我确信那里有很多选择,但至少我之前已经完成了所有这些解决方案。
对不起,我不能给你更多的想法。
您可能会遇到大量页面拆分。可通过监控(Profiler或DMV)确认。
每个表的列数太多。要求: