gpt4 book ai didi

sql - 性能 : Subquery or Joining

转载 作者:行者123 更新时间:2023-12-04 17:05:16 28 4
gpt4 key购买 nike

我有一个关于子查询性能/加入另一个表的小问题

INSERT
INTO Original.Person
(
PID, Name, Surname, SID
)
(
SELECT ma.PID_new , TBL.Name , ma.Surname, TBL.SID
FROM Copy.Person TBL , original.MATabelle MA
WHERE TBL.PID = p_PID_old
AND TBL.PID = MA.PID_old
);

这是我的 SQL,现在这个东西运行了大约 100 万次或更多。
我的问题是什么会更快?
  • 如果我改变 TBL.SID至 ( Select new from helptable where old = tbl.sid )

  • 或者
  • 如果我将“HelpTable”添加到 from并加入 where ?

  • 编辑1
    好吧,这个脚本只运行 r 个人。

    我的程序有 2 个模块,其中一个填充 MaTabelle和一个传输数据的。该程序确实将 2 个数据库合并在一起,因此有时使用相同的 key 。
    现在我正在研究一个不存在重复键的解决方案。

    我的解决方案是制作一个“HelpTable”。 key 的所有者 ( SID) 生成一个新 key 并将其写入“HelpTable”。使用此键的所有其他表都可以从“HelpTable”中读取它。

    编辑2
    我脑子里突然冒出一个东西:
    如果一个表作为一个可以为空的键(未链接的外键)
    那么这不适用于 from or?

    最佳答案

    包括 Oracle 在内的现代 RDBM 将大多数连接和子查询优化到相同的执行计划。

    因此,我会继续以对您来说最简单的方式编写查询,并专注于确保您已完全优化索引。

    如果您提供最终查询和数据库架构,我们可能会提供详细的建议,包括有关潜在锁定问题的信息。

    编辑

    以下是一些适用于您的查询的一般提示:

  • 对于连接,请确保您在要连接的列上有一个索引。请务必将索引应用于两个表中的连接列。您可能认为您只需要一个方向的索引,但您应该同时索引两个方向,因为有时数据库会确定最好在相反方向加入。
  • 对于 WHERE 子句,确保在 WHERE 中提到的列上有索引。
  • 对于插入许多行,最好将它们全部插入到单个查询中。
  • 要在具有聚集索引的表上插入,最好使用聚集索引的增量值插入,以便将新行附加到数据的末尾。这避免了重建索引,并且通常避免了对现有记录的锁定,这会减慢对现有行的 SELECT 查询。基本上,插入对系统的其他用户来说变得不那么痛苦了。
  • 关于sql - 性能 : Subquery or Joining,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2871576/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com