Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
INNER JOIN в отличие от STRAIGHT_JOIN, автоматически выбирает основную таблицу.
В практике встречались случаи, когда таблица выбиралась неправильная.
Вопрос, по какому принципу выбирается основная таблица ?
Неактивен
Сравнивается оценка времени исполнения для обоих вариантов. Есть ряд случаев, когда оценка оказывается неправильной, но нужно учитывать, что план может зависеть от числа записей в таблице и от параметров запроса. Поэтому замена на STRAIGHT_JOIN не всегда эффективна.
Неактивен
rgbeast написал:
Сравнивается оценка времени исполнения для обоих вариантов. Есть ряд случаев, когда оценка оказывается неправильной, но нужно учитывать, что план может зависеть от числа записей в таблице и от параметров запроса. Поэтому замена на STRAIGHT_JOIN не всегда эффективна.
Да, логично ... Но в тех запросах которые я встречал, число записей как раз было обратным.
То есть
Неактивен
Женя, а были условия WHERE в запросе? Были ли индексы на тех полях, по которым связка проводилась? Ты бы приложил таблички сами , я недавно тоже на похожее натыкался.
Неактивен
Приведите EXPLAIN двух запросов с разным порядком STRAIGHT_JOIN и одного с INNER JOIN. Возможно есть какие-то причины, связанные с индексами или число записей незначительное. Баги на эту тему тоже бывают.
Неактивен
Запрос банален ... никаких WHERE, индекс с двух сторон на полях соединения.
Сейчас воспроизвести не получается. Неправильное соединение зависит чисто от содержимого таблицы.
Просто думал, может есть где то опубликованный алгоритм автоматического выбора.
Хотя чисто теоретически сторону можно всегда выбирать по количеству записей в таблице.
Я ещё поиграюсь, может получиться воспроизвести ...
Неактивен
Алгоритм нигде не опубликован в деталях (до чисел). В MariaDB, по заявлению разработчиков, алгоритмы оптимизации переделаны на более правильные - интересно это проверить.
Неактивен
К слову, имеет еще смысл поэксперементировать с количеством выбираемых полей из разных таблиц (особенно если имеется сортировка) - от этого план, похоже, тоже иногда зависит.
Неактивен
Страниц: 1