加入表的效率更有效,而无需选择所需的列,或者在表上的列中加入

  • 本文关键字:或者 效率 有效 选择 sql oracle
  • 更新时间 :
  • 英文 :


我可以找到这个问题的最接近的是这个问题,但这并不是我想要的,因为他们的示例似乎会大大减少他们的选择(切下一张桌子对于那些具有指定ID的人(,而我的示例将涉及数百万行。

假设表A和表B都有50列和100万行。

做得更好:

SELECT 
    a.person, 
    cats, 
    dogs, 
    birds, 
    gerbils
FROM a
LEFT JOIN b
ON a.person = b.person

或更好地做:

SELECT 
    a1.person, 
    cats, 
    dogs, 
    birds, 
    gerbils
FROM 
(
    SELECT
        person,
        cats,
        dogs
    FROM
        a
) a1
LEFT JOIN 
(
    SELECT
        person,
        birds,
        gerbils
    FROM
        b
) b1
ON a.person = b.person

我的本能告诉我第二次可能更糟,因为它似乎试图在内存中持有更多的数据,而不是第一个。我认为第一个查询仅在内存中完全连接到内存中,而第二个查询可能会持有数百万行数据,并将其归为指定的列。我认为这是对的吗?

编辑:感谢您的响应,每个人都花了一段时间对此进行了测试,因为我的实际查询非常广泛,我找不到一个小错误。第一个绝对更有效。它在30秒内完成了,而第一个在跑步几个小时后就无法完成,这使我认为我的资源超载。

"选择列表"唯一可以在索引中完全解析查询并且不需要表访问的唯一时间;因此,通常,仅选择需要使用的列,并在不需要的情况下远离叶子。

相关内容

最新更新