0

我有来自客户端的数据,这是一个很好的重复信息的混乱。我将运行一个清理查询,它抓取转储的数据,进行一些清理,并最终将其放入一个新表中。

这是一个脚本:

INSERT INTO Spend (...)
SELECT ...
FROM Facilities F
JOIN Dump d
    ON d.facname = f.name
    AND f.city = d.city

到目前为止,一切都很好。当有新的数据转储时会出现此问题。我只想得到最新的东西。我想不出一种看起来很有效的方法。一个快速简单的WHERE NOT子句是行不通的(我不认为......),因为没有任何独特的数据列。条目的唯一性实际上仅取决于大多数(如果不是全部)列的组合。考虑到去年一家公司的转储是 20k 行,为每个转储循环遍历它们似乎是一个糟糕的主意。一旦我们在这里获得了一些用户并且数据追溯到一年多前,似乎清理工作过于密集。

或者,也许我只是一个 n00b 并且正在从一个鼹鼠山中制造一座山。感谢您的任何建议或指示-


编辑#1

附上样本记录集的图像 在此处输入图像描述

第一个 col 是 Business 表中企业 ID 的外键。剩下的就是购买记录。此表用于搜索。那么,在清理并转储到新的可搜索表之后,唯一唯一的列是每行的自动递增 ID。

4

2 回答 2

1

消除事务数据库冗余的关键是规范化;每增加一个标准化程度,都会消除另一个潜在的冗余来源。

在您的情况下,我推断您有几个冗长的文本字段,它们会使您的主数据表中的索引膨胀。我建议您将这些中的每一个放在自己的查找表中,并从主数据表中进行(人工)外键查找。这将缩小主表中的键,从而降低索引高度并相应地提高性能。同时你增加了数据的标准化。

对于报告,随后将清理后的数据提取到辅助的非规范化表(即数据透视多维数据集)中,以便最终用户更有效地访问。

于 2013-03-22T00:40:02.497 回答
0

谢谢你们的互动和帮助,伙计们。我认为最简单的解决方案是让客户端只转储新数据。我将把它附加到一个积累的转储数据池中,这样我就有了所有转储的连续记录,并让它Dump在使用它来清理并发送到我的表之前覆盖一个Spend表。

再次感谢!

于 2013-03-22T14:36:31.243 回答