我试图找出一组列是否使用oraclesql唯一地标识一个巨大表中的观察值。我正在使用python访问oracle exadata平台 cx_Oracle .背景:我对sql(oraclesql)是个新手,我的任务要求我处理大量的表,不幸的是,这些表没有很好的文档记录(我甚至不知道主键)。通过查看数据,我试图理解它,并试图找出某一组列是否唯一地标识表中的行(也可以充当pk)。
cx_Oracle
n1bvdmb61#
您可以使用聚合检查它们是否唯一:
select col1, col2, col3 from t group by col1, col2, col3 having count(*) > 1;
您还需要检查是否没有任何值 NULL .
NULL
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');
结束/嗯!
2条答案
按热度按时间n1bvdmb61#
您可以使用聚合检查它们是否唯一:
您还需要检查是否没有任何值
NULL
.rm5edbpk2#
如果表很大,使用groupby查询可能会非常慢。尝试查看是否已经有列统计信息(警告:我使用内存编写以下查询,实际列名可能不同(请检查您的oracle版本):
从user\u tab\u col\u statistics,其中table\u name=您的\u table\u name
列“last\ u analysed”告诉您何时收集统计数据如果它们非常旧,您可以使用此命令重新收集它们(但您需要相应的权限):
结束/
嗯!