我对下表<\ / p>的表现有疑问
表A - 只有5个客户ID(5行1列) 表B - 是所有客户及其信息的主基础(1百万行和500列)
查询1: -
Select A.*,
B.Age
from A
left join B
on A.Customer_id = B.Customer_id;
查询2: -
Select a.*,
B.Age
from A
left join
(select Customer_id,age from B) C
on A.Customer_id = C.Customer_id;
这里的主要性能问题是因为表B中存在500列。 我觉得第二个查询更好,因为SQL在连接期间不必创建临时表,包含表B中的所有列。
如果这是错误的,请告诉我?
答案 0 :(得分:1)
我觉得第二个查询更好,因为SQL在连接期间不必创建临时表,包含表B中的所有列。
您可以判断Oracle是否在执行期间创建临时表,或者是否从解释计划中创建临时表。您还应该考虑Oracle内核开发人员是否存在这样一个明显的性能问题(如果它存在的话)。
碰巧,没有临时表,你的第一个查询没有任何问题。由于性能原因,几乎从不需要操作查询 - 编写查询,这是您所需逻辑的最佳封装。
答案 1 :(得分:0)
CREATE INDEX index_name ON table_b (customer_id)
然后使用
Select a.*,
B.Age
from A
left join (select Customer_id,
age
from B) C
on A.Customer_id = C.Customer_id;
答案 2 :(得分:0)
500列相当广泛。
也许你可以创建一个像:
这样的索引CREATE INDEX index_name
ON table_b (customer_id,
age
);
答案 3 :(得分:0)
select中的子查询比使用join 更快(无论是直接连接还是子选择)
select
a.*,
(select b.age
from b
where b.customer_id = a.customer_id)
from a
请注意: