如何加快外键的影响

时间:2011-03-29 16:42:31

标签: sql sql-server-2005 foreign-keys

我们有一个非常规范化的数据库。当我向具有大量数据的表添加和删除具有外键的数据时,FOREVER需要删除记录,更不用说来自它的锁。我能做些什么,以便外键仍然可用,但不影响我的批量插入和删除数据库的性能。所有外键都被编入索引。

基本上,外键显着减慢了我的批量数据方案。我们的客户每天导入数十万条记录,我们每天也会删除大量数据。外键提供数据完整性,但同时显着降低了这些进程的速度。

有没有办法回避标准化架构的副作用? 你是如何解决这些相同问题的?

我正在使用SQL Server 2005。

1 个答案:

答案 0 :(得分:2)

您没有提供有关您尝试使用数据库解决的问题的足够信息。

对我来说,问题不是外键,而是它们不是静态的和/或你是级联删除。

插入可能需要规范化和分阶段加载,以便在使用引用它们的外键的行之前加载主键行,因此还有一些工作要做。删除(对于范围清除)有时可以使用分区或计划批次进行改进,并在生产期间使用软删除。

所以问题是 - 为什么你的数据如此多?您的具体使用方案是什么?并且是一个有利于此的标准化模型。通常在OLTP环境中,数据会增加和更新。 INSERT通常不会进行大量阻塞,DELETE只会阻止对删除中涉及的相同数据实体的操作(因此您希望它们被阻止)。在定期加载和卸载数据以进行分析的OLAP环境中,关系模型并不总是那么好,因此维度模型可能更合适,因为事实加载/卸载通常不会在不同时间段之间阻塞。

相关问题