Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как оптимизировать короткий запрос?

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

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

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

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

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

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


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.