Как JOIN работает внутри MySQL? - PullRequest
0 голосов
/ 17 февраля 2020

Вот мой тестовый скрипт, первичного ключа в качестве идентификатора нет, тестовый пример состоит в объединении нескольких строк, имеющих один и тот же ключ, и в результате, сколько строк.

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

Как это работает внутри? Сохраняется ли одна таблица stati c и передается ли на нее другая таблица, и как работают указатели в таких случаях и где метаданные сохраняются во время процесса соединения.

1 Ответ

1 голос
/ 17 февраля 2020

Как это работает внутри? Сохраняется ли одна таблица stati c и передается ли на нее другая таблица, и как работают указатели в таких случаях и где метаданные сохраняются во время процесса соединения.

Механизмы реляционных баз данных выполняют операций на данные для доступа, обновления или удаления. Каждый механизм имеет меньший или более широкий набор реализованных операций.

Например, в вашем случае механизм MySQL может работать, как показано ниже:

  • Поскольку нет фильтрующий предикат (он же WHERE предложение) может выполнить «полное сканирование таблицы» для одной таблицы, показанной как « all » в плане выполнения.
  • Затем он может получить доступ к связанной таблицы с использованием «сканирования диапазона индекса», известного как « index » в MySQL lin go.

Как решаются эти операции? Это работа для планировщика SQL и оптимизатора SQL. Они читают ваш запрос SQL и создают дерево операций, которые будут выполняться для получения желаемого результата. Это дерево может изменяться во времени в соответствии с эвристикой MySQL и изменениями в данных.

Как вы получаете конкретный план c? Просто получите план, используя:

explain <query>

Вы увидите план запроса во всей его красе.

...