gpt4 book ai didi

mysql - Equi Join的特例

转载 作者:可可西里 更新时间:2023-11-01 08:21:51 32 4
gpt4 key购买 nike

我遇到了这个使用特殊形式的 equi join 的特定脚本。

SELECT * 
FROM
per_assignments a, per_assigment_types b
WHERE
a.assignment_status_type_id + 0 = b.assignment_status_type_id

为什么在等值连接中添加零?我开始知道它与避免索引搜索有关,但仍然有人可以解释完整的情况。提前致谢

编辑:

这不是与表/列声明相关的东西。据我所知,这与 SQL 调优有关。

这是我发现的:-

  1. 这用于较小的表格。
  2. 这不是像通常那样进行索引搜索,而是一次搜索整个表。

但我真的不知道与普通等值连接到底有什么区别,而且索引如何影响性能。

如果有人可以在特定上下文中进行描述并让我知道我的发现是否错误,那将非常有帮助。感谢您为此付出的时间和精力:-)

列说明:

两个表中的分配状态类型 ID 都声明为 NUMBER(9)

最佳答案

取消小表索引使用的原因是性能。当您使用索引执行连接时,需要两次磁盘 I/O 来读取数据。一个读取索引,第二个从全表读取数据。对于较小的表,读取整个表并执行全表扫描比执行第二个磁盘 I/O 更快。

这是一个广泛的概括,甚至在您的数据库中也可能会不时发生变化。从理论上讲,SQL 优化器应该足够聪明,可以识别这种情况,并在索引查找中使用全表扫描,即使没有提示。如果将数据添加到一个或两个表,也有可能将更快的性能从全表扫描转移到索引查找。

我对调整这些查询的问题是:

  1. 这些表的精确定义是什么,包括 VARCHAR 列(如果有)平均有多满?
  2. 每个表中有多少行?
  3. 每天向每个表添加多少行?
  4. 这个查询多久执行一次?
  5. 有没有人计时过他们使用两个选项查询执行以查看哪个更快?

我担心的是,这个查询是作为一种巧妙的性能增强而编写的,无论是针对早期版本的数据库,还是仅仅作为一种巧妙的破解,而没有意识到查询优化器可能做得同样好或更好。

关于mysql - Equi Join的特例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5936626/

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