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

当我们使用关键字“explain”为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中只能有一行满足JOIN条件。一个,不超过一个。那是因为B.id是独一无二的。这里你是一个伪代码,它说明了服务器端的处理:
foreach (rowA in A)
{
    if (existsInBRowWithID(rowA.id)
    {
        addToResult(rowA.text, getRowInBWithID(rowA.id).text);
        break;
    }
}
ref - 现在想象另一个带有列(id,text)的表C,其中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不像前一个那么快,因为对于表A中扫描的每一行,表C中有几个可能的行,它们可以满足JOIN条件(上面的循环没有中断)。那是因为C.ID不是独一无二的。 我希望有帮助...... Cheerz!     
“类型”是指您的请求中创建的联接类型。从最好到最差,这里是列表: 系统 常量 eq_ref REF 范围 指数 所有 您可以在MySQL文档中找到更详细的说明:http://dev.mysql.com/doc/refman/5.0/en/explain-output.html     

要回复问题请先登录注册