mysql - MySQL中的eq_ref和ref类型是什么意思解释

标签 mysql database optimization explain

当我们使用关键字“解释”作为 SQL 查询的前缀时,我们会得到一个包含一些列的表。请告诉我什么是“类型”列。 eq_refref 在这种情况下是什么意思。

最佳答案

我会尝试解释...

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/

相关文章:

c++ - 为什么 gcc 会立即销毁我的对象,尽管它的范围? (我如何让它不那样做?)

mysql - sql查询来检查2个事件是否重叠

mysql - 将保存/更新调用 rails 转换为 sql

mysql - SQL更新表困惑?

database - 将sqlite数据库从内存同步到文件

sql - 使用单个sql命令创建多个表

sql - 如何优化MySQL查询(分组和顺序)

mysql - 内连接内的 SQL 查询

sql-server - 计算 SQL Server 数据库中字符串的哈希值——值得付出努力吗?

optimization - 为什么Java API 使用int 而不是short 或byte?