172 похожих чатов

Привет. Довольно абстрактный вопрос, что в среднем эффективнее использовать для

решения n+1, кучу inner джоинов или cte или несколько запросов?

15 ответов

9 просмотров

Мне видится, что "кучу" join'ов. Всё-таки они именно для того и сделаны (в частности).

Егор-Малютин Автор вопроса
Petr
Мне видится, что "кучу" join'ов. Всё-таки они имен...

Для каких то простых запросов это понятно. Но меня скорее случай когда есть много уровней вложенных запросов формата many to many

Егор Малютин
Для каких то простых запросов это понятно. Но меня...

необходимо учесть, что планировщик эффективно строит план для относительно небольшого количества таблиц при джоинах и увеличение количества таблиц приведет к увеличению этапа разбора запроса и построения плана. Гляньте параметры join_collapse_limit и from_collapse_limit. У меня был случай, когда в запросе использовались представления, вложенные друг в друга, и запрос ужасно тормозил, деградируя до full scan. Увеличение join_collapse_limit и from_collapse_limit с базовых 8 до 20 решило проблему и план задействовал индексное сканирование. Учтите, что увеличение параметров приведет к нагрузке на ЦПУ

Kairat
необходимо учесть, что планировщик эффективно стро...

Ну так поднять их до значения, большего максимального количества JOIN в используемых запросах, да и всё. Defaults всё равно очень консервативные.

Kairat
необходимо учесть, что планировщик эффективно стро...

Да но это может привести к обратному эффекту, когда план строится неприемлемо долго.

Konstantin Zaitsev
Да но это может привести к обратному эффекту, когд...

Честно говоря, не сталкивался с такими случаями, чтобы план строился дольше 1 секунды, обычно десятки мсек или сотни на oltp системах. Возможно, в olap так?

Kairat
Честно говоря, не сталкивался с такими случаями, ч...

сделайте несколько таблиц с несколькими сотнями партиций в каждой, и поджойтине их...

Извините, а в каком таком кейсе в oltp нужны данные из сотен партиций одновременно? Если мы говорим о реальном кейсе

Kairat
Извините, а в каком таком кейсе в oltp нужны данны...

планировщик не всегда способен отбросить большинство партиций на этапе планирования :/

Ilya Portnov
планировщик не всегда способен отбросить большинст...

Больше смахивает на ошибку при проектировании :)

Kairat
Больше смахивает на ошибку при проектировании :)

да достатточно просто несколько вложенных select c join

Kairat
Больше смахивает на ошибку при проектировании :)

при джойнах нескольких партиционированных таблиц, особенно если иногда партиционированные с непартиционированными джойнить, планировщик часто не может "прокинуть" даже явные ограничения на ключ партиционирования через несколько таблиц. Т.е. T1 join T2 where T1.id between 100 and 500 — в чуть более сложных случаях не сообразит какие именно партиции из T2 нужны.

Ilya Portnov
при джойнах нескольких партиционированных таблиц, ...

что можно обойти указав явно диапазон для секционированной t2.

Roman
что можно обойти указав явно диапазон для секциони...

можно. Но это надо не забывать делать для каждого такого запроса и для каждой входящей в него партиционированной таблицы.

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
А можно вопрос? Мне сегодня сказали что у меня функция (которая просто заполняет массив значениями) не правильная void Full(double * arr, int n) { for (int i = 0; i < n; i...
† C E †
7
День добрый, подскажите пожалуйста, есть ли какой-то способ сказать ребару не компилировать определённое приложение? Всю доку их перечиатл ничего подобного не нашёл
Кирилл
14
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
10
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Здравствуйте, хочу сделать HelloWorld в консоли Дельфи, но функция API ничего не выводит, что я делаю не так? program Hello; {$APPTYPE CONSOLE} uses System.SysUtils, WinAPI.Wi...
Sergey Vinogradov
20
Карта сайта