gpt4 book ai didi

mysql - 在表 JOIN 期间实际发生了什么?

转载 作者:可可西里 更新时间:2023-11-01 06:47:34 24 4
gpt4 key购买 nike

我想看看我对JOIN 的理解是否正确。

对于以下查询:

SELECT * FROM tableA 
join tableB on tableA.someId = tableB.someId
join tableC on tableA.someId = tableC.someId;

RDMS是否基本上执行如下类似的伪代码:

List tempResults
for each A_record in tableA
for each B_record in tableB
if (A_record.someId = B_record.someId)
tempResults.add(A_record)

List results
for each Temp_Record in tempResults
for each C_record in tableC
if (Temp_record.someId = C_record.someId)
results.add(C_record)

return results;

所以基本上 someId tableAtableBtableC 的记录越多,记录越多RDMS 有扫描吗?如果所有 3 个表都有具有相同 someId 的记录,那么基本上对所有 3 个表都进行了全表扫描?

我的理解正确吗?

最佳答案

当然,每个供应商的查询处理器的编写(编码)略有不同,但它们可能共享许多通用技术。可以通过多种方式实现连接,在任何供应商的实现中选择哪一种将取决于具体情况,但将考虑的因素包括数据是否已按连接属性排序,每个表中记录的相对数量(一组数据中的 20 条记录与另一组数据中的一百万条记录之间的连接将不同于每组记录具有可比大小的连接)。我不知道 MySQL 的内部结构,但对于 SQL Server,有三种不同的连接技术,Merge JoinLoop JoinHash Join 。看看this .

关于mysql - 在表 JOIN 期间实际发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41338317/

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