Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Два join

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: как это работает
Еугений
Отправлено: 14 Октября, 2015 - 14:23:32
Post Id


Частый гость


Покинул форум
Сообщений всего: 176
Дата рег-ции: Апр. 2011  


Помог: 1 раз(а)




Делаю новую страницу на своём сайте для
пользователей, так получается что там будет
запрос с двумя join (вот
набросок,упрощённый, без where):
SELECT *
FROM t1
LEFT JOIN t2 ON t1.post_id = t2.post_id
INNER JOIN t3 ON t2.post_id = t3.id

Таблицы t1 и t2 очень малы, несколько КБ, три
столбца в каждом и все integer. А вот t3
внушительна, растёт каждый день.

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

Как работает этот запрос с точки зрения БД?
Мне кажется так: сначала t1 left join t2 найдёт
необходимые id-шники, их будет немного,
0-100 штук, а уж только потом mysql
возьмется за t3. Если mysql начнёт перебирать
t3 в последнюю очередь, с готовыми id-
шками, то запрос будет не таким уж
серьёзным. Так ведь?

Или mysql в каждом своем цикле работает
сразу со всеми тремя таблицами? Если это
так то я лучше переделаю запрос на
select * from t3 where id in(select t2.post_id from
t1 left join t2 on..)
 
 Top
Мелкий Супермодератор
Отправлено: 14 Октября, 2015 - 14:45:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Еугений пишет:
Как работает этот запрос с точки зрения БД?

Как пожелает планировщик.
explain analyze покажет его мысли по этому поводу.

Даже для странного mysql, который джойнить умеет только самым примитивным inner loop'ом, приджойнить пяток таблиц по индексам не является проблемой.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB