Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / снифниф снуфнуф и все все все / 5 сообщений из 5, страница 1 из 1
04.03.2021, 08:50
    #40050535
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
снифниф снуфнуф и все все все
Есть стандартный шаблон. Две таблицы: заголовочная и таблица значений (порядка 30 на строку заголовка).

id имя другое имя1 ааа ббб2 аак ббк
id параметр значение15612385738761126678778144укеукеукеуке2128503

Они соединяются и потом разворачиваются в простыню.
id имя другое имя5612441 ааа ббб12385738766678778укеукеукеуке2 аак ббк8503

Все это обернуто в процедуру, так как довольно сложные вычисления делаются далее: используются разные параметры одного заголовка выбранные через таблицу соединений, потом разные параметры разных заголовков, тоже через таблицу с правилами соединяются, еще несколько параметров разных заголовков с несколькими другого... Поэтому таблица параметров несколько раз соединяется сама с собой. Все это разбито на несколько СТЕ для читаемости (мной и сервером).

Это я к тому, что не хотелось бы делать рекомпиляцию каждый раз. Но вот требуется делать выборки по WHERE [имя] или ( [другое имя] + (выбрать предопредеденные заголовки для [имя] в наборе где есть [другое имя] ) если (еще условие) ) и сразу же лезут полные сканы таблиц в плане.

На данный момент я разбил WHERE с монструозным правилом на два IF, и в этих IFах выбираю в табличную переменную набор id заголовков и уже его джойню везде. Это исключает сканы основных таблиц, но конечно добавляет сканы табличной переменной, что не так страшно - там порядка 50 строк обычно. Смущает, что сплошные nested loops выбирает сервер для соединения, хотя, вероятно, это нормально, так как порядок строк на среднюю выборку около 2000 до разворота.

Может быть есть иное решение как победить сложные WHERE вызывающие сканы, без переменных?
Насколько выбор табличной переменной в данном случае обоснован? Не лучше было бы временную таблицу и бухнуть туда всю выборку вместо айдишников и убрать СТЕ где выбирается по айди набор из таблицы параметров?

ЗЫ. Мне самому понятно как я описал, но вот стороннему читателю не уверен. Уж простите если тяжело читать.
...
Рейтинг: 0 / 0
04.03.2021, 10:54
    #40050564
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
снифниф снуфнуф и все все все
PizzaPizza,

чтобы было "по-реляционному", это все надо выгружать в витрину и запрашивать уже её.
...
Рейтинг: 0 / 0
04.03.2021, 18:26
    #40050824
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
снифниф снуфнуф и все все все
Владислав Колосов,

витрины это на будущее, когда к сотне миллионов строк подберемся. Пока только начали загружать данные.
Хотя конечно лучше один раз сделать при вставке, чем каждый раз при запросе.
...
Рейтинг: 0 / 0
04.03.2021, 21:52
    #40050873
SIMPLicity_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
снифниф снуфнуф и все все все
А развернуть таблицу на 90 градусов не проще?
...
Рейтинг: 0 / 0
04.03.2021, 23:06
    #40050893
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
снифниф снуфнуф и все все все
SIMPLicity_,

зачем? Хранится вполне себе канонично.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / снифниф снуфнуф и все все все / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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