LEFT JOIN работает очень медленно, но вложенный выбор не - PullRequest
0 голосов
/ 15 мая 2019

Я слышал, что JOINS более эффективны, но когда я пытаюсь реализовать его, SELECT застревает в выполнении.

Я использую MySQL, и у меня есть две таблицы, заполненные 100 000 записей сloop.

CREATE TABLE `offers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY(`id`)
);

CREATE TABLE `files` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `path` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `object_id` int(11) NOT NULL,
  PRIMARY KEY(`id`)
);

И для выполнения следующего запроса требуется 0,3 с:

SELECT o.id, (SELECT f.path FROM `files` AS f WHERE f.object_id = o.id LIMIT 1) as path FROM `offers` AS o;

Но этот запрос работает, когда таблица файлов практически пуста точно так же.Но когда я заполняю таблицу файлов, выполнение так и не завершается.

SELECT o.id, f.path FROM `offers` o LEFT OUTER JOIN `files` f ON f.object_id = o.id

Что я делаю не так?

1 Ответ

0 голосов
/ 15 мая 2019

для левого соединения

SELECT o.id, f.path 
FROM `offers` o 
LEFT OUTER JOIN `files` f ON f.object_id = o.id

будьте уверены, что у вас есть составной индекс

  on table files column(object_id, path)
...