Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Имеем запрос, в котором выбираем пользователей и одновременно из другой таблицы подтягиваем некоторые другие данные по каждому пользователю.
"Правильный" код предполагает использование LEFT JOIN и запрос выглядит следующим образом:
Неактивен
Это не равнозначные в общем случае запросы. Работать будет только если u.id соответствует не более одного e.user_id.
Второй запрос работает значительно быстрее первого!
Это о приведенном примере или все-таки про намного более "навороченный" запрос?
Во втором случае, скорее всего, какое-нибудь исключение, типа, выбор не оптимального порядка соединения таблиц оптимизатором.
Неактивен
Да, естественно, речь идет только о связи "один к одному".
Хотя второй запрос в этом плане универсален - если связанных записей больше одной, то легко можно выбрать одну нужную (по любому критерию). Попробуйте сделать что-то подобное с INNER!
Работает быстрее для запроса любой сложности - проверял на выборках от одной до 5 связанных таблиц - больше просто в этой базе нет. Чем больше выборок из связанных таблиц, тем больше разница в скорости выполнения запросов.
Что до оптимизатора сервера - я предпочитаю его не трогать - рабочий сайт я не контролирую. И если получаю выигрыш в скорости - какая мне разница, как работает этот оптимизатор!
Если я правильно понял - Вы хотите сказать, что при "правильных" настройках сервера и "правильной" структуре базы и взаимосвязей таблиц разница в скорости выполнения запросов обоих типов будет незначительная? Или INNER будет быстрее?
Неактивен
Поведение кажется странным. Приведите, пожалуйста, результат SHOW CREATE TABLE для таблиц и EXPLAIN обоих запросов.
Неактивен
Страниц: 1