【发布时间】:2021-10-25 10:15:28
【问题描述】:
我在 oracle 数据库中有表,在这些表中,有不同数量的列。在表格中,有真实世界的数据(100 万 - 10 亿行) 我想为每个表创建一个唯一索引,但我不知道哪些列或哪些列包含唯一数据。
我们的目标是为一个表找到最少的列,我可以使用这些列创建唯一索引。
我的想法是为每一列创建一个选择语句并检查它有多少不同的值:
select COLUMN_1, count(1) CC from TABLE group by COLUMN_1;
这样,我知道表中的记录数,并通过将其与此查询结果相除,我得到一个表示列唯一性的数字。对所有列执行此操作后,我按列的唯一性顺序列出列,直到每一行都变得唯一。
有没有更好的方法,或者已经存在的算法可以做到这一点?
【问题讨论】:
-
我会为每个表添加一个生成的唯一 id 列,而不是依赖现有数据的唯一性
-
表有一个唯一的 id 列,但是对于外键引用我们使用这个唯一索引的列
-
那么我想你会遇到一些头疼的问题......那么散列所有列的连接怎么样?
-
使用所有唯一索引的列而不是唯一 ID 是违反我想说的最佳实践的。你有这样做的具体理由吗?
-
实际上可能没有是一组独特的列。按唯一性的顺序将它们堆叠起来也不是正确的做法。