当我们使用关键字“解释”作为 SQL 查询的前缀时,我们会得到一个包含一些列的表。请告诉我什么是“类型”列。 eq_ref
和 ref
在这种情况下是什么意思。
最佳答案
我会尝试解释...
eq_ref – 假设您有两个表。表 A 包含列 (id, text),其中 id 是主键。表 B 具有相同的列(id、text),其中 id 是主键。表A有以下数据:
1, Hello
2, How are
表B有以下数据:
1, world!
2, you?
将 eq_ref 想象为 A 和 B 之间的 JOIN:
select A.text, B.text where A.ID = B.ID
此 JOIN 非常快,因为对于表 A 中扫描的每一行,表 B 中只能有 ONE 行满足 JOIN 条件。一个,不超过一个。那是因为 B.id 是唯一的。
这里是:伪代码,它说明了服务器端的处理:
foreach (rowA in A)
{
if (existsInBRowWithID(rowA.id)
{
addToResult(rowA.text, getRowInBWithID(rowA.id).text);
}
}
ref - 现在想象另一个表 C 的列 (id, text),其中 id 是索引,但不是唯一的。表C有以下数据:
1, John!
1, Jack!
将 ref 想象为 A 和 C 之间的 JOIN:
select A.text, C.text where A.ID = C.ID
这里是:说明服务器端处理的伪代码:
foreach (rowA in A)
{
foreach (rowC in C)
{
if (rowA.id == rowC.id)
{
addToResult(rowA.text, rowC.text);
}
}
}
此 JOIN 不如前一个快,因为对于表 A 中扫描的每一行,表 C 中有 SEVERAL 可能满足 JOIN 条件的行(嵌套循环)。那是因为 C.ID 不是唯一的。
希望对你有帮助……
干杯!
关于mysql - MySQL中的eq_ref和ref类型是什么意思解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4508055/