Mysql执行计划中eq 您所在的位置:网站首页 缩写REF Mysql执行计划中eq

Mysql执行计划中eq

2024-06-15 00:46| 来源: 网络整理| 查看: 265

下面是一位大佬的回复,我觉得挺好理解的,就来记录下。

文章目录 eq_refref

eq_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

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不是独一无二的。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有