Максимальное количество джойнов

gerasim

Новичок
Максимальное количество джойнов

Как его (сабж) узнать (кроме как экспериментом) и от чего оно вообще зависит?
В мануале не нашел. В инете кто-то пишет, что равно 32, кто-то - что, типа, оно равно разрядности системы минус 1, но это фигня, 45 джойнов на 32раз. системе нормально проходят
 

Adelf

Administrator
Команда форума
А не плевать ли сколько их? Больше 3-4 ооочень редко бывает.

Вот недавно видел базу, в которой максимальное количество джойнов равно 1 - там да, не плевать.
 

akd

dive now, work later
Команда форума
мне не лень, я попробовал на том шо под рукой.
в мускуле 5.1.45-community - ERROR 1116 (HY000) at line 3: Too many tables; MySQL can only use 61 tables in a join

в mssql 2008 - 860 джоинов на таблице с 1 записью отработало за две минуты, больше не пробовал.

т.е. реально об этом думать не стоит .. большинство приказов обходятся 1-2 джоинами, в более-менее сложных приложениях стандарт 5-7 джоинов, редко 10, совсем редко больше 10. немогу себе представить даже штуку, которой не хватит 61 :)
 

gerasim

Новичок
Интересует, можно ли это узнать, НЕ ставя подобные эксперименты - ну там параметр конфига какой за это отвечает, переменная системная, или какой-то жестко встроенный параметр.
Ну то есть вопрос ближе к теоретическому.

А насчет применения - я знаю, что много джойнов - это тормоза:) Но тут решил попробовать доставать в списках смежности путь от ноды до корня одним запросом (сейчас я это делаю выборкой дерева и рекурсией). Ну и вживую опробовал на одном форуме (13тыс записей, вирт.хостинг), там в реальной теме на 100 нод образовалась ветка в 40 нод, вот на ней запрос в 45 джойнов отрабатывал в среднем за 0.02 сек (Разумеется, это не 45 таблиц, это 1 таблица джойнилась сама на себя).
 

fixxxer

К.О.
Партнер клуба
Чувствую, следующий вопрос будет про максимальную длину запроса :D

PS. Нифига себе у тебя дерево. Я бы тут в сторону nested sets смотрел.
 

gerasim

Новичок
Автор оригинала: fixxxer
Чувствую, следующий вопрос будет про максимальную длину запроса :D

PS. Нифига себе у тебя дерево. Я бы тут в сторону nested sets смотрел.
:D :D :D
Ну, любит народ иногда поговорить:)
Меня adj. list пока устраивает как есть. Дерево-то оно легко выводится, одним запросом. А если возникнет необходимость получить путь от ноды к корню раз или два за запрос, без необходимости выгрузки дерева - такой мультиджойн как вариант мне представляется вполне нормальным. Если таких путей надо будет много - то да, или выгружать дерево и из него цигклами пути вынимать, либо действительно переделывать под nested sets, что мне лень, потому что пока не приперло, те получать сто путей к нодам заодин раз для меня тоже из серии неизведанного
 

Fortop

Новичок
т.е. реально об этом думать не стоит .. большинство приказов обходятся 1-2 джоинами, в более-менее сложных приложениях стандарт 5-7 джоинов, редко 10, совсем редко больше 10
Есть образец как получить больше не думая :D
http://www.php.ru/forum/viewtopic.php?p=204977#204977
 

akd

dive now, work later
Команда форума
Fortop, ну блин .. я видел и кривее этого штуки, мы же обсуждаем ведь общую температуру по больнице :)
 

gerasim

Новичок
Автор оригинала: Вурдалак
— пример покажешь?
Таблица, в которой есть id, id_parent, id_thread, выбираю записи с одним id_thread
А, я понял. Согласен, был неточен. Запрос-то один, но потом дерево строится рекурсией.
 
Сверху