|
Как понять, что массив значений присутствует в таблице? | ☑ | ||
---|---|---|---|---|
0
H A D G E H O G s
31.01.23
✎
01:53
|
Дня доброго.
Есть у меня массив значений, пусть это будут документы - регистраторы. И мне надо одним запросом понять, какие из этих документов есть в регистре. Регистр - большой, 95 млн строк, а по одному документу записей около 30-50k. Если мы напишем что-то типа ВЫБРАТЬ РАЗЛИЧНЫЕ БольшойРегистр.Документ КАК Документ ИЗ РегистрСведений.БольшойРегистр КАК БольшойРегистр ГДЕ БольшойРегистр.Документ В (&МассивДокументов) то он будет читать 30-50к строк по каждому документу. Наверное. Мы могли бы сделать это например, в цикле, в виде ВЫБРАТЬ ПЕРВЫЕ 1 БольшойРегистр.Документ КАК Документ ИЗ РегистрСведений.БольшойРегистр КАК БольшойРегистр ГДЕ БольшойРегистр.Документ =&МассивДокументов и это бы сработало, он читал бы по 1 строке по каждому документу, и это было бы возможно быстрее, во всяком случае, СУБД не читало бесполезные данные, как бешанный. Но как это сделать для набора данных? Как сказать SQL-ю, что достаточно считать 1 строку для каждого документа? Горшочек, не вари! |
|||
1
xraf
31.01.23
✎
03:00
|
Может из массива сделать таблицу в запросе?
И потом с соединениями поиграть? |
|||
2
H A D G E H O G s
31.01.23
✎
03:06
|
(1) какое 2-ое условие соединения?
|
|||
3
rphosts
31.01.23
✎
03:14
|
Если есть ну пусть НомерСтроки - группировать по документу с агрегатом Максимум(НомерСтроки)?
|
|||
4
H A D G E H O G s
31.01.23
✎
03:39
|
(3) это если в индекс входит. Там можно и просто условие номерстроки=1. Но у меня такого нет
|
|||
5
SleepyHead
гуру
31.01.23
✎
04:36
|
(0) А сколько документов в массиве?
|
|||
6
rphosts
31.01.23
✎
05:10
|
(4) И давно у РС перестало быть кластерного индекса?
|
|||
7
rphosts
31.01.23
✎
05:35
|
А вообще конечно неплохо-бы структуру РС увидеть
|
|||
8
АНДР
31.01.23
✎
06:23
|
(0)
Второй вариант, только в цикле собирай запрос через Объединить ВСЕ |
|||
9
RomaH
naïve
31.01.23
✎
06:43
|
как-то так?
|
|||
10
RomaH
naïve
31.01.23
✎
06:45
|
"Как сказать SQL-ю, что достаточно считать 1 строку для каждого документа?" - а - ну тогда нет - не так
|
|||
11
xraf
31.01.23
✎
08:39
|
(2) какое-нибудь максимум или минимум
|
|||
12
RomanYS
31.01.23
✎
08:46
|
Если различные не устраивает и номера строки нет, значит нужен отдельный МаленькийРегистр
|
|||
13
НЕА123
31.01.23
✎
08:56
|
(0)
если МассивДокументов небольшой, то как в (0) ВЫБРАТЬ ПЕРВЫЕ 1 БольшойРегистр.Документ КАК Документ, БольшойРегистр.ИзмерениеРесурс КАК ИзмерениеРесурс ИЗ РегистрСведений.БольшойРегистр КАК БольшойРегистр ГДЕ БольшойРегистр.Документ =&ДокументИзМассива |
|||
14
RomanYS
31.01.23
✎
08:59
|
(13) неужели СУБД настолько плохи, что запрос в цикле будет лучше чем различные?
|
|||
15
mikecool
31.01.23
✎
09:01
|
поддержу (8), экзист не завезли...
|
|||
16
Kassern
31.01.23
✎
09:07
|
(0) "о он будет читать 30-50к строк по каждому документу. Наверное. " - проверяли план запроса? Типов документов много в МассивДокументов?
|
|||
17
Fedor-1971
31.01.23
✎
09:11
|
(0) так-то РАЗЛИЧНЫЕ и есть ограничение для SQL.
По идее, выборка пойдёт по индексу Регистратор и не будет перебирать все строки в регистре |
|||
18
mikecool
31.01.23
✎
09:16
|
(17) различные, емнип, де-факто группировка
|
|||
19
Fedor-1971
31.01.23
✎
09:22
|
(18) о ёлки палки, у ТС Документ - это типа измерение и не факт, что с индексом, тогда, да группировка с перебором всего регистра
|
|||
20
H A D G E H O G s
31.01.23
✎
11:04
|
(16) проверял, читает. Из индекса вычитывает все строки по документу.
(8) вариант, но, это каждый раз компиляция нового плана запроса. |
|||
21
magicSan
31.01.23
✎
11:09
|
(18) группирвока рабоатет быстрей чем различные это раз, два distinct и group by разные операторы
|
|||
22
Кирпич
31.01.23
✎
11:13
|
внутреннее соединение же
|
|||
23
mikecool
31.01.23
✎
12:45
|
(21) уверен, что дистинкт не превращается в груп бай? емнип на каких то курсах было про это
|
|||
24
Кирпич
31.01.23
✎
13:14
|
может наоборот попробовать?
|
|||
25
H A D G E H O G s
31.01.23
✎
13:19
|
(24) бинго! Но надо проверить.
|
|||
26
Dmitrii
гуру
31.01.23
✎
17:38
|
(0) >> надо одним запросом понять, какие из этих документов есть в регистре.
Может быстрее будет найти те документы, которых нет в регистре, а потом вычесть их из исходного массива? |
|||
27
H A D G E H O G s
02.02.23
✎
01:34
|
(24) Спасибо тебе, заработало!
|
|||
28
Кирпич
02.02.23
✎
09:43
|
(27) И чо, долго считало?
|
|||
29
H A D G E H O G s
02.02.23
✎
11:24
|
(28) сколько документов в ВТ - столько и прочитанных строк индекса.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |