物理处理与逻辑处理 - 当涉及索引时,逻辑查询处理是否会更改?

Physical processing vs logical processing - Does the logical query processing change when indexes are involved?

提问人:jwa 提问时间:11/14/2023 最后编辑:jwa 更新时间:11/15/2023 访问量:168

问:

我推荐这本书。

这本书很好地解释了 sql 查询的行为,但我的疑问是,

  1. 当有索引时,如何处理 sql 查询,也就是说,这种行为会改变吗

我的怀疑是因为我是一名“老师”,我想教我的学生更多细节。enter image description here

  1. 这在 SQL Server 中解释了它,但我很确定它在 MySQL 中也适用,对吗?

我不敢解释它,当有索引时,这会改变,所以我想确保当涉及索引时,这不会改变

MYSQL SQL-SERVER T-SQL

评论

2赞 Charlieface 11/14/2023
索引与查询的物理执行相关,而不是与查询的逻辑执行相关。就逻辑而言,索引是不存在的。是的,MySQL中的逻辑执行几乎相同,除非缺少.此图也不考虑窗口函数。我相信并且顺序错误。不知道底部的“光标”和“集合”有什么区别,这不是这些词的正常含义。APPLYPIVOTUNPIVOTTOPORDER BY
3赞 Charlieface 11/14/2023
是的,为什么不呢?物理执行是另一回事:编译器需要制定出一种有效的访问方法。但是,只要结果相同,逻辑执行就不关心这一点。
2赞 Martin Smith 11/14/2023
@BillKarwin - 您描述的是物理处理。该图是关于逻辑处理的。当然,没有RDBMS会把所有的连接都实现为笛卡尔积,然后再实现一个后续的过滤器,Itzik Ben Gan用这个模型来提供一种在优化器参与之前,在纯粹的概念意义上思考逻辑处理顺序的方法。当然,他会说,不要把它与物理混淆
3赞 Martin Smith 11/14/2023
特别是,OP似乎跳过了该章的这一节 i.stack.imgur.com/npuCp.png
2赞 Martin Smith 11/14/2023
@jwa - 我建议你不要教别人这个,直到你明白它代表什么。这并不表示 SQL Server 以物理方式执行查询的方式

答:

-4赞 Alex 11/14/2023 #1

这里有两个主要概念:查询的键入顺序和逻辑查询处理顺序。

我不会列出所有现有的查询关键字,但要点如下:

键入顺序:

  1. 选择
  2. 哪里
  3. 分组依据
  4. 拥有
  5. 排序方式

逻辑处理顺序或阶段:

  1. 哪里
  2. 分组依据
  3. 拥有
  4. 选择
  5. 排序方式

简而言之,不,索引不会影响逻辑处理顺序。如果索引存在,则可以参与执行计划,但不会以任何方式中断或更改处理顺序。

评论

0赞 The Impaler 11/14/2023
键入的顺序是正确的,但逻辑处理顺序取决于查询的具体情况,并且可能无处不在。执行计划详细说明了最终实际发生的情况。
0赞 Charlieface 11/14/2023
@TheImpaler 这是什么意思?逻辑顺序不变,执行计划与物理顺序相关。
0赞 The Impaler 11/14/2023
@Charlieface 是的,这就是我所说的与执行计划相关的物理执行,与键入的序列相比,它可能遭受了广泛的重写,或者可能看起来颠倒/从里到外。