【发布时间】:2014-05-30 09:56:18
【问题描述】:
我正在使用 Toad 在 Oracle SQL 环境中运行查询,在该环境中我通过连接 16 个不同的表来构建表,但我的临时表空间已用完,我希望能就如何提高查询效率获得一些建议。我没有这方面的背景,所以我不确定最好的方法是使用中间表还是更改我的联接顺序。
主要有两个表,Header 和 Detail,header 有 2600 万行,detail 有 1.75 亿行。我对这些表使用内部联接,这将产生 1.75 亿行。其他 14 个表是较小的描述表,我使用左连接进行连接。其中三个表的行数为 350k 或更少,其他 11 个表的行数不到 1,000 行。我目前的伪代码如下:
create table END_TABLE as
select *
from Detail
inner join Header
left join description_table_1
left join description_table_2
left join description_table_3
left join description_table_4
left join description_table_5
left join description_table_6
left join description_table_7
left join description_table_8
left join description_table_9
left join description_table_10
left join description_table_11
left join description_table_12
left join description_table_13
left join description_table_14;
既然我是从我的详细信息表开始,然后加入页眉,那么效率会比我反过来做吗?我假设因为它是一个内部连接,所以没关系,但就像我之前所说的,我对提高查询效率不是很了解。
我的想法是创建一个单独的表,将标题和详细信息连接在一起,然后创建一个最终表,在其中加入较小的详细信息表。这会有帮助吗?更改我的加入顺序会有帮助吗?
【问题讨论】:
-
有索引吗?
-
@johnny,没有索引
-
您将需要在每个连接上都有一个 ON 或 USING 子句。您是否有可能限制行数的 WHERE 子句?我非常怀疑将标题放在细节之前或将细节放在标题之前会很重要。祝你好运。
-
我知道我需要一个 ON 来进行连接,但我没有看到添加键对伪代码有什么帮助,但它们无法更改。没有 WHERE 标准。