powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Порядок выполнения Join и Where
5 сообщений из 5, страница 1 из 1
Порядок выполнения Join и Where
    #39126272
murtukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Есть две таблицы для реализации древовидной структуры:

Elements
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE `Elements` (
	`genre_id` SMALLINT(3) UNSIGNED NOT NULL AUTO_INCREMENT,
	`name` VARCHAR(60) NOT NULL,
	`type` ENUM('type','form','genre','subgenre') NULL DEFAULT 'type',
	`disc` VARCHAR(60) NOT NULL,
	PRIMARY KEY (`genre_id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=33



и ElementsHierarchy
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE `ElementHierarchy` (
	`genre_id` SMALLINT(3) UNSIGNED NOT NULL,
	`parent_id` SMALLINT(3) UNSIGNED NULL DEFAULT NULL,
	`level` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
	INDEX `FK_ElementsHierarchy_Elements` (`parent_id`),
	INDEX `FK_ElementsHierarchy_Elements_2` (`genre_id`),
	CONSTRAINT `FK_ElementsHierarchy_Elements` FOREIGN KEY (`parent_id`) REFERENCES `Elements` (`genre_id`),
	CONSTRAINT `FK_ElementsHierarchy_Elements_2` FOREIGN KEY (`genre_id`) REFERENCES `Elements` (`genre_id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB




И есть запрос с двумя джоинами, для получения дерева по ID.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT Elements.*, Parent.ParentID FROM Elements

INNER JOIN ElementsHierarchy as Hier
        ON Hier.ElemID = Elements.ID

INNER JOIN ElementsHierarchy as Parent
        ON Parent.ElemID = Elements.ID

WHERE Hier.ParentID = 24




Я бы хотел спросить, в какой последовательности происходят Join'ы? Если бы там был один джоин, то понятно: берется одна таблица и ее записям сопоставляются записи из другой таблицы, с учетом условий. Но вот как происходит двойной (и более) джоины? Я немного путаюсь тут, сначала джоинятся первые две таблицы, а затем полученный результат джоинится дальше?
Был бы рад ссылкам на хорошие (желательно русскоязычные) источники

Спасибо
...
Рейтинг: 0 / 0
Порядок выполнения Join и Where
    #39126515
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
murtukovв какой последовательности происходят Join'ы?
Они трансформируются в картезианку плюс WHERE.
...
Рейтинг: 0 / 0
Порядок выполнения Join и Where
    #39126540
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНо вот как происходит двойной (и более) джоины
оптимизатор решает. на русском вряд ли будут.
https://dev.mysql.com/doc/refman/5.7/en/cost-model.html
...
Рейтинг: 0 / 0
Порядок выполнения Join и Where
    #39126597
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot ]


Я бы хотел спросить, в какой последовательности происходят Join'ы?


JOINы выполняются в произвольном порядке. как решит СУБД
...
Рейтинг: 0 / 0
Порядок выполнения Join и Where
    #39127082
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

только не "в произвольном", а "в оптимальном" :)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Порядок выполнения Join и Where
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]