Sql 连接表与连接视图的Teradata性能
我有各种各样的桌子,我正在连接在一起。每个表都有一个主索引,并且大部分(但不是全部)在日期字段上进行分区。每个表都有一个关联的视图 如果我在表单中写一个查询Sql 连接表与连接视图的Teradata性能,sql,join,views,teradata,Sql,Join,Views,Teradata,我有各种各样的桌子,我正在连接在一起。每个表都有一个主索引,并且大部分(但不是全部)在日期字段上进行分区。每个表都有一个关联的视图 如果我在表单中写一个查询 select * from view1 join view2 on pi1 = pi2 join view3 on pi1 = pi3 join view4 on pi1 = pi4 我遇到了线轴空间不足的问题。直接查询表是否更好?是否最好创建一些中间表并一次执行几个连接,然后在中间表上创建新的索引和分区 您应该首先检查查询的“解释”输
select
*
from view1
join view2
on pi1 = pi2
join view3
on pi1 = pi3
join view4
on pi1 = pi4
我遇到了线轴空间不足的问题。直接查询表是否更好?是否最好创建一些中间表并一次执行几个连接,然后在中间表上创建新的索引和分区 您应该首先检查查询的“解释”输出。[如果您使用的是Teradata SQL Assistant,则只需选择查询并按F6键-这将输出解析引擎(PE)关于如何执行查询的计划] 我怀疑您会在解释输出中看到很多“重新分配”[我认为,Teradata是一个隐藏的社会主义者]——记住,要连接两行,它们必须位于同一个放大器上。如果不是,则由于通过视图连接的每个表上的PI不同,因此需要重新分配 您还需要检查是否需要收集某些列的统计信息。不正确的统计数据可能会导致PE提出错误的查询计划。例如:如果您要加入的表中有一个很大,但表是倾斜的,则PE可能会错误地检测到它实际上是一个小表,并尝试将其复制到所有放大器(而不是重新分配),这通常会导致空间不足 你为什么不把问题的“解释”贴出来呢? 首先设置此选项:为会话打开诊断帮助状态
如果不查看视图正在做什么,就很难判断。您应该首先检查查询的“解释”输出。[如果您使用的是Teradata SQL Assistant,则只需选择查询并按F6键-这将输出解析引擎(PE)关于如何执行查询的计划] 我怀疑您会在解释输出中看到很多“重新分配”[我认为,Teradata是一个隐藏的社会主义者]——记住,要连接两行,它们必须位于同一个放大器上。如果不是,则由于通过视图连接的每个表上的PI不同,因此需要重新分配 您还需要检查是否需要收集某些列的统计信息。不正确的统计数据可能会导致PE提出错误的查询计划。例如:如果您要加入的表中有一个很大,但表是倾斜的,则PE可能会错误地检测到它实际上是一个小表,并尝试将其复制到所有放大器(而不是重新分配),这通常会导致空间不足 你为什么不把问题的“解释”贴出来呢? 首先设置此选项:为会话打开诊断帮助状态
如果不查看视图正在做什么,就很难判断。不需要创建中间表 在不了解更多细节的情况下,可能有一个简单的原因:
- 有两个表,如发票和发票\u行,逻辑 PK是(发票号)和(发票号、行号)
- 这两个表的主索引都是(invoice_number)以获取所有行 用于单放大器上的发票,以加快处理速度
- 这两个表都是按发票日期划分的(实际上保留 不需要发票行中的发票日期,因为它是相同的 每一行的日期。在这两行上都可以得到匹配的分区 (表格)
- 加入不包括发票日期,它只是基于 发票号码。根据PK-FK,这是正确的,但会导致 非常慢的连接,因为优化器不知道是哪一个 发票号存储在哪个分区->所有分区需要 可以访问
获取所有对象的DDL的最简单方法是在select(除非DBA限制)前面显示一个SHOW,统计数据由HELP stats tablename返回不需要创建中间表 在不了解更多细节的情况下,可能有一个简单的原因:
- 有两个表,如发票和发票\u行,逻辑 PK是(发票号)和(发票号、行号)
- 这两个表的主索引都是(invoice_number)以获取所有行 用于单放大器上的发票,以加快处理速度
- 这两个表都是按发票日期划分的(实际上保留 不需要发票行中的发票日期,因为它是相同的 每一行的日期。在这两行上都可以得到匹配的分区 (表格)
- 加入不包括发票日期,它只是基于 发票号码。根据PK-FK,这是正确的,但会导致 非常慢的连接,因为优化器不知道是哪一个 发票号存储在哪个分区->所有分区需要 可以访问
获取所有对象的DDL的最简单方法是在select(除非DBA限制)前面显示一个SHOW,统计数据由HELP stats tablename返回您的代码示例建议使用笛卡尔积,因为您没有加入任何字段。这代表什么