不同模式和重复的合并数据库
合并表经常会产生重复的条目,可以通过几种方式删除。 诀窍在于知道哪种方式最适合特定的情况。 通常,确定最佳方法的唯一方法是测试几种方法并比较它们对数据库性能的影响。
这是数据库管理中最常见的操作之一:合并使用不同模式的两个表,同时删除重复条目。 然而,解决这个问题的方法和数据库表的类型一样多。 还有同样多的潜在故障。
这里有三种方法来解决这种情况。
将多个具有相似值的表组合在一起通常会产生重复的条目。 有几种方法可以用来消除SQL中的重复值,但是在给定的情况下很难确定哪种方法是最好的。
在2012年10月的一篇StackOverflow文章中,提出了一些从连接的表中删除重复项的方法。 第一个是将内部查询转换为通用表表达式(CTE):
与使用关键字消除重复项相比,内部联接的通用表表达式对性能的影响通常较小。 资料来源:StackOverflow。
第二种方法是使用关键字,一个海报声称在某些情况下关键字表现更好。 还建议使用函数和分组子句。
SQL工具箱中的一个基本元素是运算符,它检查重复项并只返回不同的行,还存储两个表中没有重复项的数据:
当第二个表中的行的值与联接表中的值不匹配时,插入第二个表中的行,或者创建一个不影响任何原始表的新表。 资料来源:史黛西·科维尔弗洛
或者,您可以使用命令从两个单独表的内容中创建一个新表,以消除重复:
该命令根据另外两个表的内容创建一个新表,并删除原始表中的重复项。 资料来源:StackOverflow。
数据库表变得庞大并不罕见。 想象一下,合并12个表,总共有近1000万条独立记录,超过3GB。 对StackOverflow的第一个建议是创建一个新表,该表对建立行唯一性的列集具有唯一约束,然后使用将行从旧表移动到新表,最后截断旧表并使用将行返回到原始表。
另一个建议的解决方案是创建一个特定的视图,该视图结合了12个表的结果,然后通过查询您刚刚创建的视图来过滤结果。