Имя: Пароль:
1C
1С v8
Как оптимизировать короткий запрос?
0 NurSagen
 
28.12.21
13:36
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ ПЕРВЫЕ 3064 // если здесь написать 3065 или больше - сразу тормоза
    Источник.ПолеСтрока КАК ПолеСтрока
ПОМЕСТИТЬ втТаблица
ИЗ
    Источник КАК Источник

ИНДЕКСИРОВАТЬ ПО
    Поле1
;

////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ПереодическийНезависимыйРегистр.Измерение1 КАК Измерение1
ИЗ
    РегистрСведений.ПереодическийНезависимыйРегистр КАК ПереодическийНезависимыйРегистр
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ втТаблица КАК втТаблица
        ПО ПереодическийНезависимыйРегистр.Измерение1 = втТаблица.ПолеСтрока
ГДЕ
    ПереодическийНезависимыйРегистр.Ресурс = "что-то"

Второй запрос (где поиск по регистру) проходит быстро (десятые секунды), если в первой таблице меньше 3065 строк, если больше, сразу тормоза (15 секунд). Что можно сделать?
План запроса проанализировать нет возможности.
1 NurSagen
 
28.12.21
13:38
То есть надо просто из регистра сведений "ПериодическийНезависимыйРегистр" отобрать Значение "Измерений", отфильтровав их. И все. Первую таблицу описал просто для наглядности.
2 pechkin
 
28.12.21
13:38
скорее всего что первые 3064 лежат в начале тиаблицы, а остальные в конце
3 acht
 
28.12.21
13:40
(0) > План запроса проанализировать нет возможности.
Структуру метаданных проанализировать нет возможости. Извини.
4 NurSagen
 
28.12.21
13:42
(3) я же описал структуру метаданных, чего не хватает?
5 NurSagen
 
28.12.21
13:42
Поле "ПереодическийНезависимыйРегистр.Измерение1" в конфигураторе не индексировано. Тип - строка(36)
6 pechkin
 
28.12.21
13:44
измерение1 никогда и не индексируется дополнительно
7 NurSagen
 
28.12.21
13:45
(6) почему?)
8 pechkin
 
28.12.21
13:46
потому что оно входит в составной индекс
9 fisher
 
28.12.21
13:46
Если у тебя в измерениях длинные строки, то ты ССЗБ
А так напрашивается
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ПереодическийНезависимыйРегистр.Измерение1 КАК Измерение1
ИЗ
    РегистрСведений.ПереодическийНезависимыйРегистр КАК ПереодическийНезависимыйРегистр
ГДЕ
    ПереодическийНезависимыйРегистр.Ресурс = "что-то"
    И ПереодическийНезависимыйРегистр.Измерение1 В (ВЫБРАТЬ ПолеСтрока ИЗ Источник)
10 aka MIK
 
28.12.21
13:50
(0) прикольно. А если условие после ГДЕ  перенести в соединение?
11 МихаилМ
 
28.12.21
13:50
(0)Уже то , что в запросе есть "ИНДЕКСИРОВАТЬ ПО     Поле1"
говорит о многом.
Как Вы думаете зачем в правилах форума есть рекомендации указывать версии по ?
12 aka MIK
 
28.12.21
13:50
(9) странный совет
13 ManyakRus
 
28.12.21
13:51
(8) Измерение1 надо индексировать если есть ещё Измерение2
т.к. запрос без периода в периодическом регистре
14 pechkin
 
28.12.21
13:51
(10) странный совет
15 aka MIK
 
28.12.21
13:52
(0) попробуйте отобрать в ВТ регистр по условию, а потом уже внутреннее соединение. Конечно так себе метод, но попытка не пытка
16 aka MIK
 
28.12.21
13:53
(14) некоторые это рекомендуют
17 acht
 
28.12.21
13:53
(4) Начем с ограничений RLS, порядка измерений и наличия индекса по Ресурс1
18 pechkin
 
28.12.21
13:53
(16) ну надо же понимать для чего
19 fisher
 
28.12.21
13:54
(15) И это мой совет странный. Мой совет лишь дает больше свободы оптимизатору запросов, а твой подразумевает конкретные расклады, которых ты знать не можешь.
20 ManyakRus
 
28.12.21
13:55
2) можно ещё Ресурс проиндексировать на всякий случай
3) соединять надо таблицу где мало данных к таблице где много данных(строк)
4) соединять по колонке с типом "строка" это плохо, надо что-то переделать чтоб была не строка
21 pechkin
 
28.12.21
13:56
(20) скажи как ты думешь происходит соединение на стороне скл?
22 ManyakRus
 
28.12.21
13:57
5) если регистр периодический - значит вам нужен СрезПоследних а не все данные
23 Kassern
 
28.12.21
13:58
(22) может ТС нужно по дням инфу получать?
24 ManyakRus
 
28.12.21
13:59
(21) если не надеяться на оптимизатор запросов, который совсем не работает если мало памяти
то запрос будет буквально по-порядку как написано возьмет первую таблицу большую и будет соединять вторую таблицу уменьшая количество выбранных строк, а надо наоборот
25 pechkin
 
28.12.21
14:00
(24) те только 1 вид соединения бывает?
26 Kassern
 
28.12.21
14:00
(23) в итоге может получиться следующая портянка, на каждый день для 100500 строк идет соединение с 100500 строк первой таблицы, где еще может быть 2 измерения, а соединение по 1. А дней в выборке может быть пару лет в разрезе дня)
27 acht
 
28.12.21
14:01
(22), (24) Вау, круто! А напиши что-нибудь еще по-своему, по-программистки!
28 fisher
 
28.12.21
14:01
(24) Байки из склепа какие-то.
29 Kassern
 
28.12.21
14:03
(0) Вы что от этого периодического регистра получить хотите? Данные в разрезе периода дополненные из источника?
30 aka MIK
 
28.12.21
14:05
(19) так сразу ж написали что оптимизатор живет своей жизнью. Нельзя давать ему свободы, иначе будет выстреливать вот так постоянно.

Я уже десятки таких ситуаций у себя в системе исправлял
31 aka MIK
 
28.12.21
14:06
(22) срез последних тоже живет своей жизнью. Лучше написать по основной таблице, если есть возможность
32 ManyakRus
 
28.12.21
14:08
ИТС: "Не используйте индексирование по строковым полям, суммарная длина которых превышает 300 символов. "

Вы делаете так как запрещено поэтому тормозит :-)
33 aka MIK
 
28.12.21
14:09
(18) рекомендация отсюда https://youtu.be/IxmXvsbi6-Q?t=2227
34 ManyakRus
 
28.12.21
14:10
ещё с сайта 1С ИТС:
"использование длинных строк в измерениях регистров может существенно сказаться на производительности системы."
35 acht
 
28.12.21
14:19
(32) Чуви, ты 300 символов и 36 можешь сравнить?
36 vde69
 
28.12.21
14:20
ВЫРАЗИТЬ(Источник.ПолеСтрока КАК СТРОКА(512)) КАК ПолеСтрока
37 vde69
 
28.12.21
14:21
(36) ну и убрать индексирование
38 acht
 
28.12.21
14:21
(36) Дядь Дим, и ты туда же. Зачем из строки, длиной в 36 символов делать строку в 512?
39 acht
 
28.12.21
14:22
Длина строки написана в (5) если что.
40 ManyakRus
 
28.12.21
14:24
(39) 1)в одной таблице 36 символов а в другой неизвестно ещё
2) раз 36 символов - значит это ГУИД, значит это есть такой справочник или документ с этим ГУИД,
значит в регистре хранить надо ссылку на справочник а не ГУИД :-)
41 fisher
 
28.12.21
14:34
(30) Я предложил для начала отпустить вожжи и посмотреть не станет ли лучше. Работая оптимизатором самому нужно как минимум понимать, что именно ты оптимизируешь. От ТС нет подробностей по характеру наполнения таблиц, поэтому твои советы тоже не претендуют на большее, чем гадание на кофейной гуще.
ЗЫ. Глядя на твои крайне негативные отзывы про работу оптимизатора, у меня два вопроса. У тебя postgresql? Ты статистику пересчитывать пробовал?
42 H A D G E H O G s
 
28.12.21
14:36
(41) Он менял запрос и статистика пересчитывалась сама :-)