powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / снифниф снуфнуф и все все все
5 сообщений из 5, страница 1 из 1
снифниф снуфнуф и все все все
    #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
снифниф снуфнуф и все все все
    #40050564
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PizzaPizza,

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

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

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


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