【问题标题】:Logical query processing phase of INSERT, DELETE, and UPDATE in SQL queriesSQL查询中INSERT、DELETE、UPDATE的逻辑查询处理阶段
【发布时间】:2016-02-29 05:11:32
【问题描述】:

我很好奇 SQL 查询的逻辑查询处理阶段。

对于SELECT查询,逻辑查询处理阶段顺序为:

  1. 来自
  2. 开启
  3. 外层
  4. 在哪里
  5. 分组依据
  6. 立方体 |汇总
  7. 选择
  8. 不同
  9. 订购人
  10. 顶部

INSERTUPDATEDELETE 的顺序是什么?

【问题讨论】:

  • 还是和SELECT一样。在执行任何操作之前首先确定受影响的行
  • 所以是关于 sql-server 还是 mysql?
  • 关于 sql-server
  • 取决于“逻辑查询处理阶段”的含义。如果您查看查询计划,您会看到 SORTS (ORDER BY) 早于实际计划中的联接

标签: sql sql-server sql-server-2008


【解决方案1】:

如果您想知道实际的查询处理顺序是什么,请查看执行计划。这将逐步告诉您 SQL Server 正在做什么。

https://technet.microsoft.com/en-us/library/ms178071(v=sql.105).aspx

【讨论】:

  • 谢谢你.. 乔纳森·艾伦先生
【解决方案2】:

SQL Server:Source

  1. 来自
  2. 开启
  3. 加入
  4. 在哪里
  5. 分组依据
  6. 使用多维数据集或使用汇总
  7. 选择
  8. 不同
  9. 订购人
  10. 顶部

【讨论】:

  • 嗨迈克尔..谢谢你的回答。你能解释一下插入、更新和删除查询吗..
  • @Sruthy 我的理解是没有区别。 Select/Update/Insert/Delete 的查询计划与 final 运算符没有区别。不过,我正在努力寻找资源来支持我的信念。我欢迎任何有相反证据的人。
【解决方案3】:

我有同样的问题,但在互联网上找不到答案。 所以我试图从逻辑上得出答案。 这是一个简单的 UPDATE 语句(表的别名为 a):

UPDATE tbl_employees a
  SET a.Name = 'Anna'
  WHERE a.Id = 122;

显然,无论是SET还是WHERE都可以在识别表之前执行,所以UPDATE必须是第一个逻辑步骤。证明:别名 a 正在工作(在 Microsoft Access 中)。

在应用 SET 语句之前,需要知道应用它的记录。所以 WHERE 必须作为第二个逻辑步骤(省略 WHERE 会改变表中的所有记录)

在 WHERE 过滤的记录集上应用 SET 语句必须是第三步。

总结一下,逻辑处理顺序一定是:

  1. 更新(~相当于 FROM)
  2. 在哪里
  3. SET(~相当于 SELECT)

任何其他顺序似乎都很荒谬(你能假设任何其他顺序吗?)。

再一次,这是我自己的逻辑推导。我不确定。我会申请任何指向严肃互联网资源的链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2015-12-09
    相关资源
    最近更新 更多