我正在尝试找出一组列是否使用 Oracle SQL 唯一标识了 HUGE 表中的观察结果。我正在使用cx_Oracle
.
背景:我是 SQL(Oracle SQL)的新手,我的任务要求我使用 HUGE 表,不幸的是这些表没有很好地记录(我什至不知道主键)。通过查看数据,我试图理解它,并试图找出一组列是否唯一标识表中的行(并且可以作为 PK)。
您可以使用聚合检查它们是否唯一:
select col1, col2, col3
from t
group by col1, col2, col3
having count(*) > 1;
您还需要检查没有任何值是NULL
.
如果表很大,使用 group by 查询可能会很慢。尝试查看是否已经有列统计信息。(警告我从记忆中编写了下面的查询,实际的列名可能不同,请检查您的 oracle 版本):
select column_name, num_distinct
来自 user_tab_col_statistics 其中 table_name = YOUR_TABLE_NAME
“last_analysed”列会告诉您何时收集统计信息 如果它们非常旧,您可以使用此命令重新收集它们(但您需要适当的权限):
begin
dbms_stats.gather_table_stats('YOUR_TABLE_NAME', method-opt -> 'for all columns size 1');
结尾; /
嗯!