powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
25 сообщений из 32, страница 1 из 2
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34785669
Nike85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Доброго времени суток участникам форума!

Сегодня «открыл» для себя такой факт, что от выбора основной таблицы (к которой будут присоединяться join-ами другие таблицы) очень даже зависит производительность запроса. Пример:

Код: plaintext
1.
2.
3.
select s1.rsrprice, max(s1.dord),K.barkod,K.Name  from sporder s1
left join katmc K on s1.cmc=K.nrec
WHERE s1.dord>='2005-01-01' And s1.vidorder= 0 
group by s1.rsrprice, K.barkod,K.Name

выполняется намного быстрее, чем:

Код: plaintext
1.
2.
3.
SELECT K.Name, K.barkod, s1.rsrprice, max(s1.dord) FROM katmc K
LEFT JOIN sporder s1 on k1.nrec=s1.cmc
WHERE s1.dord>='2005-01-01' And s1.vidorder= 0 
group by s1.rsrprice, K.barkod,K.Name

Первый отработал за ~3 минуты, выгрузив все ~82000 записей; второй (ради интереса я оставил его на выполнение) за 2 часа!! выгрузил только ~200 записей.

Насколько я понимаю, производительность в данном случае зависит от расположения таблиц по сторонам отношения LEFT JOIN, состава этих таблиц и индексов, входящих в них.
Вот, по сути, что и меня интересует – от чего в данном случае зависит скорость выполнения? Для чего служат и чем различаются LEFT, RIGHT, INNER, OUTER JOIN-ы?
Разъясните на пальцах, может кто-нибудь выложит ссылки на литературу/источники с описанием сабжа. Хотелось бы, конечно, обсудить это здесь, на форуме, но другие источники - тоже хорошая вещь (может блажь в голову взбредет, и в свободное время почитаю :))
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34785711
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nike85 wrote:
> Для чего служат и чем различаются LEFT, RIGHT,
> INNER, OUTER JOIN-ы?
Пока что это - главное, что должно Вас волновать.
После осознания того, что у Вас - два РАЗНЫЙ запроса, которые,
соответственно ДОЛЖНЫ возвращать РАЗНЫЕ результаты, которые выполняются
ПО РАЗНОМУ....
Вот тогда то...

зы В первом случае у вас left join, во втором - неявный inner join....
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34786224
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nike85
Код: plaintext
1.
FROM katmc K
LEFT JOIN sporder s1 on k1.nrec=s1.cmc
lockyво втором - неявный inner join?
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34786294
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft Nike85
Код: plaintext
1.
FROM katmc K
LEFT JOIN sporder s1 on k1.nrec=s1.cmc
lockyво втором - неявный inner join?
k1 ???
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34786382
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават Юсифовk1 ???я полагаю, что k1 -это опечатка и должно быть просто k, т.к. более k1 нигде в запросе не упоминается.

Кажется я понял, что имел ввиду locky. Если в таблице katmc поле nrec гарантированно ссылается на существующую запись в таблице sporder, то запрос будет эквивалентен INNER JOIN-у. Правда, этой гарантии в том, что написал автор темы я не вижу.
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34786871
Nike85Здравствуйте! Доброго времени суток участникам форума!

Сегодня «открыл» для себя такой факт, что от выбора основной таблицы (к которой будут присоединяться join-ами другие таблицы) очень даже зависит производительность запроса. Пример:

Код: plaintext
1.
2.
3.
select s1.rsrprice, max(s1.dord),K.barkod,K.Name  from sporder s1
left join katmc K on s1.cmc=K.nrec
WHERE s1.dord>='2005-01-01' And s1.vidorder= 0 
group by s1.rsrprice, K.barkod,K.Name

выполняется намного быстрее, чем:

Код: plaintext
1.
2.
3.
SELECT K.Name, K.barkod, s1.rsrprice, max(s1.dord) FROM katmc K
LEFT JOIN sporder s1 on k1.nrec=s1.cmc
WHERE s1.dord>='2005-01-01' And s1.vidorder= 0 
group by s1.rsrprice, K.barkod,K.Name

Первый отработал за ~3 минуты, выгрузив все ~82000 записей; второй (ради интереса я оставил его на выполнение) за 2 часа!! выгрузил только ~200 записей.

Насколько я понимаю, производительность в данном случае зависит от расположения таблиц по сторонам отношения LEFT JOIN, состава этих таблиц и индексов, входящих в них.
Вот, по сути, что и меня интересует – от чего в данном случае зависит скорость выполнения? Для чего служат и чем различаются LEFT, RIGHT, INNER, OUTER JOIN-ы?
Разъясните на пальцах, может кто-нибудь выложит ссылки на литературу/источники с описанием сабжа. Хотелось бы, конечно, обсудить это здесь, на форуме, но другие источники - тоже хорошая вещь (может блажь в голову взбредет, и в свободное время почитаю :))

Я рад, что Вы открыли для себя истину Декартова Произведения множеств, план выполнения запросов и оптимизацию....
Если говорить "по-простому", то:
LEFT JOIN - левая таблица join'a "отдаст" все свои записи, а правая - только по совпадающему ключу; для ненайденного в правой таблице ключа левой таблицы будет выдаваться NULL.
Аналогично для RIGHT JOIN ("левая" надо заменить на "правая").
OUTER JOIN - полное соединение = полное декартово произведение множеств - выбираются все сочетания ключей связанных таблиц
INNER JOIN - внутреннее соединение - выбираются записи таблиц с совпадающим значением ключа (когда пишем: Where a.abc=b.abc это и есть INNER JOIN "по умолчанию").
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34786975
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nike85 пишет:
> Сегодня «открыл» для себя такой факт, что от выбора основной таблицы (к
> которой будут присоединяться join-ами другие таблицы) очень даже зависит
> производительность запроса. Пример:

Это ты заблуждаешься. Т.е. у тебя первая стадия. Ты уже понял, что
выбор плана зависит от порядка JOIN-ов, но еще не понял, что зависимость
эта случайна.

> Вот, по сути, что и меня интересует – от чего в данном случае зависит
> скорость выполнения? Для чего служат и чем различаются LEFT, RIGHT,
> INNER, OUTER JOIN-ы?
> Разъясните на пальцах, может кто-нибудь выложит ссылки на
> литературу/источники с описанием сабжа. Хотелось бы, конечно, обсудить
> это здесь, на форуме, но другие источники - тоже хорошая вещь (может

Ага, много вопросов - и мало ответов. Опять на лицо все признаки первой
стадии. Но возникает естественный вопрос -- при чем здесь db-design ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34786977
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
locky пишет:

> Пока что это - главное, что должно Вас волновать.
> После осознания того, что у Вас - два РАЗНЫЙ запроса, которые,

А что, афтар топега еще и не соблюдает семантическую эквивалентность
запросов ? Уууу как все запущено ...
Тогда это даже не первая стадия. 0.5.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34787923
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft wrote:
> Кажется я понял, что имел ввиду locky. Если в таблице katmc поле nrec
> гарантированно ссылается на существующую запись в таблице sporder, то
> запрос будет эквивалентен INNER JOIN-у. Правда, этой гарантии в том, что
> написал автор темы я не вижу.
нет
Код: plaintext
1.
2.
LEFT JOIN sporder s1 on k1.nrec=s1.cmc
WHERE s1.dord>='2005-01-01' And s1.vidorder= 0 
в клаузе where стоит ограничениение (s1.dord>='2005-01-01' And
s1.vidorder=0) на "левую" таблицу, что сводит left join к inner join
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34787948
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockyнет
Код: plaintext
1.
2.
LEFT JOIN sporder s1 on k1.nrec=s1.cmc
WHERE s1.dord>='2005-01-01' And s1.vidorder= 0 
в клаузе where стоит ограничениение (s1.dord>='2005-01-01' And
s1.vidorder=0) на "левую" таблицу, что сводит left join к inner joinТочнее, на "правую". Но в целом согласен. Про where я как-то не подумал...
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34787966
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft wrote:
> Точнее, на "правую".
Да, сорри. Хотя - как посмотреть...
"левая" - потому что присоеднияется "левым внешним"

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34788004
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
locky
miksoft wrote:
> Точнее, на "правую".
Да, сорри. Хотя - как посмотреть...
"левая" - потому что присоеднияется "левым внешним"так присоедияется-то справа. А "левой внешней" таблицей будет katmc.
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34788175
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Велика Сила Веры. :)
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34788183
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават ЮсифовВелика Сила Веры. :)а? я что-то пропустил?
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34788674
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft locky
miksoft wrote:
> Точнее, на "правую".
Да, сорри. Хотя - как посмотреть...
"левая" - потому что присоеднияется "левым внешним"так присоедияется-то справа. А "левой внешней" таблицей будет katmc.Точнее "внешним" (сохраняющим нестыкованные записи) будет тот кто слева / справа / оба по тексту запроса.
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34789995
Фотография optimizer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав С...кий
OUTER JOIN - полное соединение = полное декартово произведение множеств - выбираются все сочетания ключей связанных таблиц.

здесь вы ошибаетесь. декартово произведение называется cross join.
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34790198
Ivanov Oleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
Ты уже понял, что
выбор плана зависит от порядка JOIN-ов, но еще не понял, что зависимость
эта случайна.


Можно поспорить о случайности этой зависимости... Все зависит от СУБД и типа оптимизатора
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34790838
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv wrote:
> Это ты заблуждаешься. Т.е. у тебя первая стадия. Ты уже понял, что
> выбор плана зависит от порядка JOIN-ов, но еще не понял, что зависимость
> эта случайна.
Вроде как справедливо для CE, для прочих - зависит тупизны
оптимизатора/данных/метаданных.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34790954
Demion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Nike85 :
посмотри в документации "SQL Server Books Online", я сам оттуда познал предназначение джойнов :)
и вообще полезная дока
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34791624
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЭто ты заблуждаешься. Т.е. у тебя первая стадия. Ты уже понял, что
выбор плана зависит от порядка JOIN-ов, но еще не понял, что зависимость
эта случайна.
Странная формулировка.

Если "выбор планов зависит от порядка join-ов", это очень плохо и показывает несовершенство оптимизатора. Хотя, помнится, в беседе об ansi синтаксисе join-ов некоторые коллеги рассматривали это как преимущество.

Однако, "случайная зависимость" - этот термин меня заинтриговал. Нельзя ли дать ему какое-либо мало-мальски формальное определение.
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34791953
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer MasterZivслучайна.
Если "выбор планов зависит от порядка join-ов", это очень плохо и показывает несовершенство оптимизатора. Хотя, помнится, в беседе об ansi синтаксисе join-ов некоторые коллеги рассматривали это как преимущество.

Однако, "случайная зависимость" - этот термин меня заинтриговал. Нельзя ли дать ему какое-либо мало-мальски формальное определение.гм. софтваре, вы действительно не въезжаете, что цытируемое - шутка юмора? Или настолько не понимаете [ansi синтаксисе join-ов] чтобы не увидеть, что там оптимизатору предлагаются разные запросы? (по поводу чего видимо шутка юмора и случилась)
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34792073
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assaгм. софтваре, вы действительно не въезжаете, что цытируемое - шутка юмора? Или настолько не понимаете [ansi синтаксисе join-ов] чтобы не увидеть, что там оптимизатору предлагаются разные запросы? (по поводу чего видимо шутка юмора и случилась)
Хм. assa, отрадно видеть человека, который верит в свои теории несмотря на явное противоречие фактам. В данном случае - Ваша теория опирается на гипотезу "автор пошутил, поскольку увидел что разные запросы", в то время как задокументирован факт - автор узнал об этом расхождении после публикации своего сообщения.
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34792553
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer assaгм. софтваре, вы действительно не въезжаете, что цытируемое - шутка юмора? Или настолько не понимаете [ansi синтаксисе join-ов] чтобы не увидеть, что там оптимизатору предлагаются разные запросы? (по поводу чего видимо шутка юмора и случилась)
Хм. assa, отрадно видеть человека, который верит в свои теории несмотря на явное противоречие фактам. В данном случае - Ваша теория опирается на гипотезу "автор пошутил, поскольку увидел что разные запросы", в то время как задокументирован факт - автор узнал об этом расхождении после публикации своего сообщения.уууу, как всё запущено.
мне например очевидно наличие 2-х полседовательно выданных мастазивом шуток йумора. поскольку вы полагаете, что первая произошла до осознания отсутсвия семантической инвариантности, можно думать что вторая явно показывает несерьезность и первой. (на чем я ,впрочем споткнувшись, не особо фиксировался по прочтении, но шутку тады оценил (давно это было, т.ч. извините, не пересмотрел контекст нонче - писал по памяти, "вспылил").
теперь теряюсь в догадках - то ли оценивать ваше Ч.Ю. на где-то запредельном для меня уровне, то ли - напротив.


зы. вот ту недавно наткнулся на трактат беклемишева по женской логике. что интересно - редкий педант (т.е. - зануда - с общеупотребительной т.з.), вернее даже - редкостный, - а какое, оказывается, ч.ю.
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34792689
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assaуууу, как всё запущено.
мне например очевидно
Угу.

1. "Очевидное утверждение - утверждение, которое автору так и не удалось доказать"
2. "Если факты противоречат теории - тем хуже для фактов".
...
Рейтинг: 0 / 0
ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
    #34793948
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer assaуууу, как всё запущено.
Угу.

1. "Очевидное утверждение - утверждение, которое автору так и не удалось доказать"
2. "Если факты противоречат теории - тем хуже для фактов".вы таки йуморисд.

(единственный способ зануде стать йумориздом - оставаться последовательным занудой. ничего смешнее в жизни видимо не бывваит)

по поводу "не удалось", и вообще "преклонения мущщин перед самим процессом логического вывода" -

щербаков(с)В ту пору часто, закрыв учебник,
я от амбиций моих ущербных
провозглашал решённым вопрос любой.
И заключал, что двойного смысла
иметь не могут слова и числа,
и пребывал отчаянно горд собой .
Но проходила неделя, две ли,
слова смещались куда хотели,
как А и Б, сидевшие на трубе.
И числа вновь обретали сложность.
И сознавал я свою ничтожность,
и изнывал от ненависти к себе...

вопрос тут не в "удалось" - "не удалось", а в исходных посылках. а вот поскольку они тут произвольны -, то "самоочевидные" вещи как раз и могут быть приняты в их качестве. т.ч. никакой потребности в изображении длинной "логической" цепочки из стоь же потолочных соображений, единственно с целью потрясть оппа-нента, я тут не испитывайу
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / ПРОИЗВОДИТЕЛЬНОСТЬ запроса или что такое JOINы??
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]