我们的产品同时测试了大约350名候选人。在测试结束时,每个候选人的结果将被移动到一个充满索引的数据仓库。对于每个测试,在数据仓库中输入大约400条记录。所以400 x 350是很多记录。如果数据仓库中没有太多记录,那么一切顺利。但是如果数据仓库中已有很多记录,那么很多插入失败......
有没有办法让索引只在一天结束时重建或者不是真正的问题?或者你会如何解决这个问题?
答案 0 :(得分:2)
在数据仓库中常见的做法是在加载之前删除索引和约束,然后重新创建它们。 如果您摆脱了约束(FK),请确保您的加载过程处理此问题。删除任何检查约束,并将检查验证移到ETL软件中,
答案 1 :(得分:2)
140K不是很多行。 请发布您的表格设计以及插入失败时出现的错误
答案 2 :(得分:1)
我已经使用了规范化和Kimball星数据仓库,这听起来不像你应该遇到的问题。我会说即使在一个小型数据仓库中,140000行也不是很多行。
为什么插入失败?通常在Kimball样式的仓库中,没有插入失败 - 例如在事实表中,插入始终具有与维度和粒度相关的唯一主键集(如日期或时间快照)。在dimmension表中,检测到更改,插入新尺寸,重新使用现有尺寸。在规范化的仓库中,您通常会有某种修订机制或归档过程或生效日期,以保持事物的独特性。
在我看来,无论你的DW理念或架构如何,都应该保留这些行的独特之处。
如果(正如您在评论中所述)您有一个包含每列的索引,那么这可能不是一个非常有用的索引(在任何数据库设计中)。您确定您的索引甚至被用于任何查询吗?它是否也被标记为唯一且是否违反了约束?在任何情况下,这是一个相当大的多列索引,并且比较相对昂贵 - 这可能会导致超时 - 你可以随时修复你的连接中等待永远,但我会解决问题设计观点。
答案 3 :(得分:1)
我建议如下:保留所有数据,除了今天的单独表格(我们称之为历史记录),其中索引已针对您的报告进行了调整。将今天的数据保存在另一个单独的表中(让我们称之为今天)并在午夜运行一个作业,将数据从Today表移动到History表。在Today表中 - 您应该使用最小的索引来提高插入性能。 通过实施此设计,您将确保报告不会与插入一起使用。此外 - 您有两个表针对其目的进行了调整。通常,快速插入和快速选择都很难调整表格。