在Teradata 考虑一种情况,我们在一个表中有超过40亿条记录,并且需要在不属于主索引或辅助索引且未分区的列上执行DISTINCT / GROUP BY。
现在这需要花费太多时间。 有没有其他方法可以实现这一目标。
这是一个独立的环境,因此我无法从中复制数据,也无法在此环境中创建新表。它只是我的SELECT访问权限。
答案 0 :(得分:1)
如果您需要列HELP STATISTICS {database}.{tablename}
的唯一值数,则会为您提供包含统计信息和唯一值数的列。在Teradata 14或更高版本中,您可以执行SHOW STATISTICS VALUES COLUMN {column} ON {database}.{tablename};
此命令将为您提供有关直方图的更多详细信息,包括列的偏差值。偏差值可以包含列的所有唯一值或仅包含前几百个值。您对表的权限可能允许也可能不允许。
如果使用统计信息是不可能的,因为它们不存在或您没有足够的权限,那么您将最终扫描该表。即使在列上收集统计信息以获取此信息,也会导致全表扫描。
最后,根据您正在调查的表和列,您可能会发现数据建模器维护的数据字典将具有此列的预期域。他们可能已完成针对此表的数据分析以获取此信息。