Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JOIN在MySQL内部是如何工作的?_Mysql_Left Join_Right Join - Fatal编程技术网

JOIN在MySQL内部是如何工作的?

JOIN在MySQL内部是如何工作的?,mysql,left-join,right-join,Mysql,Left Join,Right Join,这是我的测试脚本,并没有主键作为ID,测试用例是连接多个具有相同键的行,结果是有多少行 create table Test1(id integer, name varchar(100)); insert into Test1(id, name) values(1, "Vijay"); insert into Test1(id, name) values(1, "Sandy"); insert into Test1(id, name) values(1, "Rohit"); create tab

这是我的测试脚本,并没有主键作为ID,测试用例是连接多个具有相同键的行,结果是有多少行

create table Test1(id integer, name varchar(100));
insert into Test1(id, name) values(1, "Vijay");
insert into Test1(id, name) values(1, "Sandy");
insert into Test1(id, name) values(1, "Rohit");

create table Test2(id integer, surname varchar(100));
insert into Test2(id, surname) values(1, "karma");
insert into Test2(id, surname) values(1, "sharma");
insert into Test2(id, surname) values(1, "yadav");

select Test1.id , Test1.name , Test2.surname from Test1 
left outer join
Test2 on Test1.id = Test2.id;


1   Vijay   karma
1   Sandy   karma
1   Rohit   karma
1   Vijay   sharma
1   Sandy   sharma
1   Rohit   sharma
1   Vijay   yadav
1   Sandy   yadav
1   Rohit   yadav

select Test1.id , Test1.name , Test2.surname from Test1 
right outer join
Test2 on Test1.id = Test2.id;

1   Vijay   karma
1   Vijay   sharma
1   Vijay   yadav
1   Sandy   karma
1   Sandy   sharma
1   Sandy   yadav
1   Rohit   karma
1   Rohit   sharma
1   Rohit   yadav
这在内部是如何工作的?要做的是保持一个表是静态的,并流式传输另一个表,以及指针在这种情况下如何工作,以及在连接过程中元数据存储在何处

这在内部是如何工作的?要做的是保持一个表是静态的,并流式传输另一个表,以及指针在这种情况下如何工作,以及在连接过程中元数据存储在何处

关系数据库引擎对数据执行操作,以便访问、更新或删除数据。每个引擎都有一个更小或更广泛的操作库

例如,在您的情况下,MySQL引擎可能工作如下所示:

  • 由于没有过滤谓词(aka
    WHERE
    子句),它可以对一个表执行“完整表扫描”,在执行计划中显示为“all
  • 然后,它可以使用“索引范围扫描”访问相关表,在MySQL的行话中称为“Index
这些行动是如何决定的?这是SQL规划器和SQL优化器的工作。它们读取您的SQL查询并生成一个操作树,这些操作树将被执行以生成您想要的结果。此树可能会根据MySQL的启发和数据的变化而随时间变化

你如何得到具体的计划?只需使用以下工具获取计划:

explain <query>
解释

您将看到查询计划的辉煌。

对于关系数据库,如果没有主键,那么就没有真正的表