📅  最后修改于: 2021-01-11 11:48:55             🧑  作者: Mango
在Teradata中,执行性能调整以识别所有瓶颈,然后解决它们。
瓶颈不是错误的一种形式,但肯定会导致一定程度的延迟。
有以下几种方法可以识别瓶颈并解决瓶颈,例如:
性能调优的第一步是对查询使用EXPLAIN。当查询前面带有EXPLAIN命令时,解析引擎的执行计划将返回给用户而不是AMP。
EXPLAIN计划清楚地展示了优化器执行查询的方式。在说明计划中,检查诸如
优化器使用数据人口统计数据提出有效的执行策略。 COLLECT STATISTICS命令用于收集表的数据人口统计信息。确保在列上收集的统计信息是最新的。
表中的每一列都与一种数据类型相关联。数据类型指定将在列中存储哪种类型的值。每个数据值都属于SQL数据类型。
确保使用正确的数据类型。这样可以避免使用过多的存储空间。
确保联接条件中使用的列的数据类型兼容,以避免显式数据转换。
除非需要,否则删除不必要的ORDER BY子句。
如果查询超出该用户的每个AMP后台处理空间限制,则会生成后台处理空间错误。
验证说明计划,并确定消耗更多线轴空间的步骤。这些常见查询可以拆分并分开放置以构建临时表。
主索引用于指定数据在Teradata中的位置。每个表都必须定义一个主索引,因此请确保为该表正确设置了主索引。
主索引列应平均分配数据,并应经常用于访问数据。
如果在表中定义了分区主索引,请尝试使用它。如果我们不在过滤条件下使用它,它将降低性能。
如果我们定义一个SET表,那么优化器将检查每个插入的记录是否重复。要删除重复的检查条件,我们需要为表定义唯一二级索引。
更新大表将非常耗时。无需更新表,我们可以删除记录并插入具有修改后的行的文件。
如果不再需要临时表(临时表)和volatile,则将其删除。这将释放永久空间和线轴空间。
如果我们确认输入记录中没有重复文件,则可以将目标表定义为MULTISET表,以避免SET表使用重复行检查。
当where条件中可能存在大量值时,请避免在过滤条件中使用IN子句,那么最好将此类值插入volatile表中,并在主查询中使用带有INNER JOIN的volatile表。
避免仅在SET条件且没有WHERE条件的情况下使用UPDATE子句。即使目标和源只有一行,也可以为PI列添加WHERE子句。