如何获取Oracle数据库中识别唯一列与非空列的SQL语句?
识别Oracle数据库架构中唯一列与非空列的查询语句
当然可以!下面是Oracle环境下用来识别近似唯一列(通过非唯一索引判断)和非空列的实用查询语句,你可以直接套用:
识别近似唯一的列(适合发现应设为唯一键的列)
这个查询会找出那些定义为非唯一索引但实际数据几乎没有重复的列(重复率低于1%),帮你发现那些应该设置唯一约束但遗漏的列:
SELECT Table_name, index_name, num_rows, distinct_keys FROM dba_indexes WHERE table_owner = 'ownername' AND uniqueness = 'NONUNIQUE' AND num_rows > 0 AND 100 * ( num_rows - ( num_rows - distinct_keys ) ) / num_rows > 99;
注:核心判断条件
100 * ( num_rows - ( num_rows - distinct_keys ) ) / num_rows > 99等价于(distinct_keys/num_rows)*100 > 99,也就是唯一值占总行数的比例超过99%,你可以根据实际需求调整这个比例阈值。
识别非空列
下面的查询会找出指定用户下所有完全没有空值的列,如果你需要找空值极少的列,也可以调整条件:
SELECT t.table_name, c.column_name, t.num_rows, c.num_nulls FROM dba_tab_columns c JOIN dba_tables t ON t.owner = c.owner AND t.table_name = c.table_name WHERE t.owner = 'ownername' AND c.num_nulls = 0; -- 筛选完全无空值的列,若要空值极少可改为 (c.num_nulls/t.num_rows)*100 < 1
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

