MySQL неправильно объясняет объединение большой таблицы

У меня есть таблица размером 4 ГБ, и когда я пытаюсь выбрать из нее строку с левым соединением в другой таблице, на диске создается очень большая временная таблица. Мой sql:

 select * 
   from ads 
   left join theme 
     ON ads.theme_id = theme.id 
  ORDER BY ads.id DESC 
  limit 1

таблица ads имеет 4 ГБ данных, но таблица theme очень мала. Когда я пытаюсь объяснить этот запрос, mysql не показывает мне, что временная таблица будет создана, но это так. И когда я использую sql

SELECT * 
  from ads, 
       theme 
 where ads.theme_id = theme.id 
 ORDER BY ads.id DESC 
 LIMIT 1

mysql работает очень быстро, однако этот запрос имеет такое же объяснение от mysql.

Я использую движок innodb и у меня есть только первичные индексы.


person user1927652    schedule 02.09.2013    source источник


Ответы (1)


Добавьте индекс на ads.theme_id. В противном случае ему придется просмотреть всю таблицу ads, чтобы сравнить этот столбец с theme.id.

person Barmar    schedule 02.09.2013