Индексы и вложенные объединения - PullRequest
2 голосов
/ 29 февраля 2012

Я часто разбиваю свои сложные запросы на временные таблицы, чтобы комментировать их и помогать понять шаги.

Значительно ли это отличается от того, как mysql обрабатывает вложенные соединения внутри?

например, select * from t1,t2,t3,t4 where t1.id=t2.id and t2.id2 = t3.id2, t4.id3 = t3.id3

Переносятся ли индексы, определенные в t1, на любую внутреннюю таблицу, созданную mysql для хранения промежуточных результатов?

Существуют ли какие-либо существенные различия в производительности между явным определением временных таблиц или использованием одного запроса, полного вложенных объединений?

1 Ответ

1 голос
/ 29 февраля 2012

Индексы не переносятся во временные таблицы, которые вы явно создаете.Они как обычные таблицы, за исключением того, что они исчезнут, когда у вас больше не будет открытого сеанса.База данных не знает, что данные в таблице изначально получены из запроса к некоторым другим таблицам, имеющим индексы;с одной стороны, вы могли бы вставить / удалить / обновить строки во временной таблице с момента запроса.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...