eq_ref和ref类型在MySQL中的含义是什么

7gyucuyw  于 2022-12-26  发布在  Mysql
关注(0)|答案(2)|浏览(249)

当我们用关键字“explain”作为SQL查询的前缀时,我们会得到一个包含一些列的表。请告诉我“type”列是什么。eq_refref在该上下文中是什么意思。

umuewwlo

umuewwlo1#

我会试着解释...

    • 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

This JOIN is very fast because for each row scanned in table A there can be onlyONErow in table B which satisfies the JOIN condition. One and no more than one. That is because B.id is UNIQUE.
给你:* 伪代码 *,说明服务器端的处理:

foreach (rowA in A)
{
    if (existsInBRowWithID(rowA.id)
    {
        addToResult(rowA.text, getRowInBWithID(rowA.id).text);
    }
}
    • ref**-现在想象另一个表C,其中列(id,text)的id是一个索引,但不是UNIQUE索引。表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不如前一个JOIN快,因为对于表A中扫描的每一行,表C中可能有SEVERAL行满足JOIN条件(嵌套循环)。这是因为C. ID不是UNIQUE。

bvn4nwqk

bvn4nwqk2#

“类型”指的是您请求中的联接类型。以下是从最佳到最差的列表:

  • 系统
  • 常数
  • eq_参考
  • 参考
  • 范围
  • 索引
  • 全部

您可以在MySQL文档中找到更详细的解释:http://dev.mysql.com/doc/refman/5.0/en/explain-output.html

相关问题