Oracle SQL:检查一组变量是否唯一标识表中的观察值

Oracle SQL:检查一组变量是否唯一标识表中的观察值,sql,oracle,cx-oracle,exadata,Sql,Oracle,Cx Oracle,Exadata,我正在尝试使用Oracle SQL找出一组列是否唯一地标识大型表中的观察值。我正在使用cx\u Oracle通过Python访问Oracle Exadata平台 背景:我是SQL(Oracle SQL)新手,我的任务要求我处理大型表,不幸的是,这些表没有很好的文档化(我甚至不知道主键)。通过查看数据,我试图理解它,并试图找出某组列是否唯一地标识表中的行(也可以充当PK)。您可以使用聚合检查它们是否唯一: select col1, col2, col3 from t group by col1,

我正在尝试使用Oracle SQL找出一组列是否唯一地标识大型表中的观察值。我正在使用
cx\u Oracle
通过Python访问Oracle Exadata平台



背景:我是SQL(Oracle SQL)新手,我的任务要求我处理大型表,不幸的是,这些表没有很好的文档化(我甚至不知道主键)。通过查看数据,我试图理解它,并试图找出某组列是否唯一地标识表中的行(也可以充当PK)。

您可以使用聚合检查它们是否唯一:

select col1, col2, col3
from t
group by col1, col2, col3
having count(*) > 1;

您还需要检查所有值是否为
NULL

您可以使用聚合检查它们是否唯一:

select col1, col2, col3
from t
group by col1, col2, col3
having count(*) > 1;

如果表很大,使用GROUPBY查询可能会非常慢,那么您还需要检查所有值是否为
NULL

。 尝试查看是否已经有列统计信息。 (警告:我根据记忆编写以下查询,实际列名可能不同请检查您的oracle版本):

从用户选项卡列统计信息 其中table_name=您的_table_name

“上次分析”一栏告诉您何时何地收集统计数据 如果它们非常旧,您可以使用此命令重新聚集它们(但您需要相应的权限):

结束; /


如果表很大,使用GROUPBY查询可能会非常慢。 尝试查看是否已经有列统计信息。 (警告:我根据记忆编写以下查询,实际列名可能不同请检查您的oracle版本):

从用户选项卡列统计信息 其中table_name=您的_table_name

“上次分析”一栏告诉您何时何地收集统计数据 如果它们非常旧,您可以使用此命令重新聚集它们(但您需要相应的权限):

结束; /

begin
   dbms_stats.gather_table_stats('YOUR_TABLE_NAME', method-opt -> 'for all columns size 1');