40亿条记录不同

时间:2014-11-27 09:57:58

标签: sql teradata

在Teradata 考虑一种情况,我们在一个表中有超过40亿条记录,并且需要在不属于主索引或辅助索引且未分区的列上执行DISTINCT / GROUP BY。

现在这需要花费太多时间。 有没有其他方法可以实现这一目标。

这是一个独立的环境,因此我无法从中复制数据,也无法在此环境中创建新表。它只是我的SELECT访问权限。

1 个答案:

答案 0 :(得分:1)

如果您需要列HELP STATISTICS {database}.{tablename}的唯一值数,则会为您提供包含统计信息和唯一值数的列。在Teradata 14或更高版本中,您可以执行SHOW STATISTICS VALUES COLUMN {column} ON {database}.{tablename};此命令将为您提供有关直方图的更多详细信息,包括列的偏差值。偏差值可以包含列的所有唯一值或仅包含前几百个值。您对表的权限可能允许也可能不允许。

如果使用统计信息是不可能的,因为它们不存在或您没有足够的权限,那么您将最终扫描该表。即使在列上收集统计信息以获取此信息,也会导致全表扫描。

最后,根据您正在调查的表和列,您可能会发现数据建模器维护的数据字典将具有此列的预期域。他们可能已完成针对此表的数据分析以获取此信息。