【问题标题】:What does eq_ref and ref types mean in MySQL explainMySQL中的eq_ref和ref类型是什么意思解释
【发布时间】:2011-05-29 07:51:28
【问题描述】:

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

【问题讨论】:

    标签: mysql database optimization explain


    【解决方案1】:

    我会尝试解释...

    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 不是唯一的。

    希望对你有帮助……

    干杯!

    【讨论】:

    • 完美解释!
    【解决方案2】:

    “类型”是指在您的请求中提出的加入类型。从最好到最差,这里是列表:

    • 系统
    • 常量
    • eq_ref
    • 参考
    • 范围
    • 索引
    • 全部

    您将在 MySQL 文档中找到更详细的说明:http://dev.mysql.com/doc/refman/5.0/en/explain-output.html

    【讨论】:

    • 是的,谢谢,但我不是在寻找那个......我已经理解 system 和 const 在该类型中的含义......但是 eq_ref 和 ref 是什么意思?我已经阅读了mysql文档中的解释,但无法理解......
    猜你喜欢
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 2018-12-01
    相关资源
    最近更新 更多