我正在使用索引对数据仓库进行性能调整。我对 SQL Server 2014 还是很陌生。Microsoft 描述了以下内容:
“我们将聚集列存储索引视为存储大型数据仓库事实表的标准,并预计它将用于大多数数据仓库场景。由于聚集列存储索引是可更新的,您的工作负载可以执行大量的插入、更新、和删除操作。” http://msdn.microsoft.com/en-us/library/gg492088.aspx
但是,如果您进一步阅读文档,您会发现限制和限制:
“不能有唯一约束、主键约束或外键约束。”
这让我很困惑!出于各种原因(数据完整性、语义层可见的关系......)
所以微软提倡数据仓库场景使用聚集列存储索引;但是,它不能处理外键关系?!
我在这方面正确吗?您会建议哪些其他方法?过去,我在数据仓库场景中使用了非聚集列存储索引,对数据加载进行删除和重建。然而,SQL Server 2014 并没有为数据仓库增加真正的新价值??
foreign-key data-warehouse sql-server columnstore sql-server-2014
我试图为 SSIS 查找组件找到一些性能良好的 Tsql 等效项。特别是对于事实表加载。
在几个不同的查询模式之后,最 obv 表现最好:
INSERT INTO Fact WITH (TABLOCK)
SELECT
F.Attribute1,
...
d1.DimAId,
d2.DimBId,
d3.DimCId,
...
F.Amount
...
from Staging.dbo.GeneralLedger F WITH(NOLOCK)
LEFT OUTER JOIN DimA1 d1 WITH(NOLOCK)
on d1.AId = F.AId
LEFT OUTER JOIN DimB d2 WITH(NOLOCK)
on d2.BId = F.BId
LEFT OUTER JOIN DimC d3 WITH(NOLOCK)
on d3.CId = F.CId
Run Code Online (Sandbox Code Playgroud)
性能方面,我用 500 万行和 9 个维度的查找对此进行了测试。
SSIS:1 分 14 秒 TSQL:1 分 14 秒
如果我在更大的数据集(+100M 行)上选择 TSQL 而不是 SSIS,这将是什么意思 目前我在 200GB RAM 服务器上测试了这个,所以在内存中安装所有内容都没有问题。
但是我想如果这个查询将在内存较少的机器上使用,它将开始溢出到磁盘并严重损害性能。SSIS 会在内存方面更有效率。我对这个假设是否正确? …
我有一个需要很长时间才能回滚事务的数据库。这可能是正常的,因为它正在回滚大量数据。
但是,我有脚本可以再次创建数据库,并且只想删除数据库,以便停止回滚...
我怎样才能做到这一点?
已经谢谢了!
亲切的问候