避免数据清理重复的最有效方法

时间:2013-03-22 00:23:03

标签: mysql sql resources

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

这是一个脚本:

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

附加样本记录集的图像 enter image description here

第一个col是Business表中业务ID的外键。其余的是购买记录。此表用于搜索。清理并转储到新的可搜索表后,唯一唯一的列是每行的自动递增ID。

2 个答案:

答案 0 :(得分:1)

消除事务数据库冗余的关键是规范化;每增加一次正常化程度就会消除另一种可能的冗余来源。

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

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

答案 1 :(得分:0)

感谢您的互动和帮助。我认为最简单的解决方案是让客户端只转储新数据。我会将它附加到一个积累的转储数据池中,这样我就可以连续记录所有转储并让它覆盖Dump表,然后再使用它来清理并发送到我的Spend表。

再次感谢!