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 [3]

 PHP.SU

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


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

> Описание: когда много JOIN-в
LIME
Отправлено: 17 Апреля, 2014 - 11:41:32
Post Id


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


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




ЦРУКУ применяется к результирующей таблице после объединения
при выносе условий в объединение оно сразу становится меньше
значительно
 
 Top
DlTA
Отправлено: 17 Апреля, 2014 - 12:05:37
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


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




LIME пишет:
WHERE применяется к результирующей таблице после объединения
при выносе условий в объединение оно сразу становится меньше
значительно
в общем то этого и надо было добиться, так как при нескольких объединениях пересеченная таблица должна быть ну очень большой


и вопрос чисто чтоб мне не рыть маны
а допустимо
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT *
  2. FROM
  3.         `goods`
  4.         JOIN `hierarchy` ON (`hierarchy`.`intableID`=`goods`.`id` AND `hierarchy`.tableID=7)
  5. WHERE
  6.         `goods`.`tights`=1     

вынести последнее условие в объединение (если да то как) и есть ли смысл это делать?
 
 Top
LIME
Отправлено: 17 Апреля, 2014 - 12:12:46
Post Id


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


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




ну вынести можно также через AND
а насчет смысла самому интересно
и попробуй сначала равенства значению указать и уже потом `hierarchy`.`intableID`=`goods`.`id`
 
 Top
DlTA
Отправлено: 17 Апреля, 2014 - 12:20:03
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


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




LIME пишет:
и попробуй сначала равенства значению указать и уже потом `hierarchy`.`intableID`=`goods`.`id`
от перестановки последовательности условий в JOIN разницы в производительности не заметил

а вот как
SELECT *
FROM
`goods` AND `goods`.`tights`=1
JOIN `hierarchy` ON (`hierarchy`.`intableID`=`goods`.`id` AND `hierarchy`.tableID=7)
подобное писать не понял
 
 Top
LIME
Отправлено: 17 Апреля, 2014 - 12:20:55
Post Id


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


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT *
  2. FROM
  3. `goods`
  4. JOIN `hierarchy` ON (`hierarchy`.`intableID`=`goods`.`id` AND `hierarchy`.tableID=7 AND `goods`.`tights`=1)
 
 Top
DlTA
Отправлено: 17 Апреля, 2014 - 12:24:53
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


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




LIME пишет:
CODE (SQL):
скопировать код в буфер обмена
SELECT *
FROM
`goods`
JOIN `hierarchy` ON (`hierarchy`.`intableID`=`goods`.`id` AND `hierarchy`.tableID=7 AND `goods`.`tights`=1)


возможно появился прирост скорости при нагрузках, тяжело судить

а вот воспринимать подобные выкрутасы сложнее
 
 Top
Zuldek
Отправлено: 17 Апреля, 2014 - 12:57:11
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


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




Цитата:
и как показывает статистика этот запрос выполняется в 2-10 раз быстрее, хотя разница только в том что условия вынесены в JOIN
прикольно

Никакого волшебства только логика работы субд.
В случае со всеми условиями в where сначала выполняется выборка всех данных со всеми джоинами, а потом принменяются условия. В случае же с вынесениями условий в джоин выборка отсекается уже на этапе джоина
Улыбка

(Отредактировано автором: 21 Апреля, 2014 - 11:17:16)

 
 Top
Страниц (3): « 1 2 [3]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB