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

vq8itlhq  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(245)

我试图找出一组列是否使用oraclesql唯一地标识一个巨大表中的观察值。我正在使用python访问oracle exadata平台 cx_Oracle .
背景:我对sql(oraclesql)是个新手,我的任务要求我处理大量的表,不幸的是,这些表没有很好的文档记录(我甚至不知道主键)。通过查看数据,我试图理解它,并试图找出某一组列是否唯一地标识表中的行(也可以充当pk)。

n1bvdmb6

n1bvdmb61#

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

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

您还需要检查是否没有任何值 NULL .

rm5edbpk

rm5edbpk2#

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

select column_name, num_distinct

从user\u tab\u col\u statistics,其中table\u name=您的\u table\u name
列“last\ u analysed”告诉您何时收集统计数据如果它们非常旧,您可以使用此命令重新收集它们(但您需要相应的权限):

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

结束/
嗯!

相关问题