|
снифниф снуфнуф и все все все
|
|||
---|---|---|---|
#18+
Есть стандартный шаблон. Две таблицы: заголовочная и таблица значений (порядка 30 на строку заголовка). id имя другое имя1 ааа ббб2 аак ббк id параметр значение15612385738761126678778144укеукеукеуке2128503 Они соединяются и потом разворачиваются в простыню. id имя другое имя5612441 ааа ббб12385738766678778укеукеукеуке2 аак ббк8503 Все это обернуто в процедуру, так как довольно сложные вычисления делаются далее: используются разные параметры одного заголовка выбранные через таблицу соединений, потом разные параметры разных заголовков, тоже через таблицу с правилами соединяются, еще несколько параметров разных заголовков с несколькими другого... Поэтому таблица параметров несколько раз соединяется сама с собой. Все это разбито на несколько СТЕ для читаемости (мной и сервером). Это я к тому, что не хотелось бы делать рекомпиляцию каждый раз. Но вот требуется делать выборки по WHERE [имя] или ( [другое имя] + (выбрать предопредеденные заголовки для [имя] в наборе где есть [другое имя] ) если (еще условие) ) и сразу же лезут полные сканы таблиц в плане. На данный момент я разбил WHERE с монструозным правилом на два IF, и в этих IFах выбираю в табличную переменную набор id заголовков и уже его джойню везде. Это исключает сканы основных таблиц, но конечно добавляет сканы табличной переменной, что не так страшно - там порядка 50 строк обычно. Смущает, что сплошные nested loops выбирает сервер для соединения, хотя, вероятно, это нормально, так как порядок строк на среднюю выборку около 2000 до разворота. Может быть есть иное решение как победить сложные WHERE вызывающие сканы, без переменных? Насколько выбор табличной переменной в данном случае обоснован? Не лучше было бы временную таблицу и бухнуть туда всю выборку вместо айдишников и убрать СТЕ где выбирается по айди набор из таблицы параметров? ЗЫ. Мне самому понятно как я описал, но вот стороннему читателю не уверен. Уж простите если тяжело читать. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2021, 08:50 |
|
снифниф снуфнуф и все все все
|
|||
---|---|---|---|
#18+
PizzaPizza, чтобы было "по-реляционному", это все надо выгружать в витрину и запрашивать уже её. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2021, 10:54 |
|
снифниф снуфнуф и все все все
|
|||
---|---|---|---|
#18+
Владислав Колосов, витрины это на будущее, когда к сотне миллионов строк подберемся. Пока только начали загружать данные. Хотя конечно лучше один раз сделать при вставке, чем каждый раз при запросе. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2021, 18:26 |
|
снифниф снуфнуф и все все все
|
|||
---|---|---|---|
#18+
А развернуть таблицу на 90 градусов не проще? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2021, 21:52 |
|
|
start [/forum/topic.php?fid=46&fpage=32&tid=1685008]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 17ms |
total: | 154ms |
0 / 0 |