JOIN在MySQL内部是如何工作的?
这是我的测试脚本,并没有主键作为ID,测试用例是连接多个具有相同键的行,结果是有多少行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
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
子句),它可以对一个表执行“完整表扫描”,在执行计划中显示为“all”WHERE
- 然后,它可以使用“索引范围扫描”访问相关表,在MySQL的行话中称为“Index”
explain <query>
解释
您将看到查询计划的辉煌。对于关系数据库,如果没有主键,那么就没有真正的表