【发布时间】:2020-11-13 15:07:52
【问题描述】:
我目前正在尝试将几个表连接在一起(如果可能的话,可能还会再加入 2 个),但是按照我现在的查询编写方式,我什至看不到 3 个表的结果
select t1.x,
t1.y,
t1.z,
t4.a,
t4.b,
t4.c,
t4.d
from t1
left join t2 on t1.id=t2.id
left join t3 on t2.id=t3.id
left join t4 on t1.id2=t4.id
where t1.date between 'x' and'x'
and t1.city not in ('x')
and t3.column = x;
有没有办法优化此代码以更快地运行,并可能使其能够向其中添加更多表?
提前谢谢你!
【问题讨论】:
-
1:您应该指定您的 DBMS(oracle、mysql、sqlserver...)。 2:你应该发布你的表结构,包括索引。 3:您应该发布 EXPLAIN PLAN 的结果以供您查询。之后,我们将能够为您提供帮助。
-
没有解释计划很难说,但是如果这些表很大并且与第一个表有多对多的关系,您可能希望在您之前使用临时表来仅存储相关数据和列做连接。我不确定 t2 和 t3 上的
left join是否是故意的,但如果不是,您可以尝试使用 t2 和 t3 的where exists,因为您并没有真正从这些表中提取任何列 -
没有样本数据和更多解释,你的问题没有意义。它基本上说:“我有一些数据不会显示给你,还有一个查询不符合我的要求。”需要的是对您拥有的数据的解释以及对您想要做什么的解释。
-
请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。暂停总体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你的期望和原因。
标签: sql performance join hive left-join