|
Как оптимизировать короткий запрос? | ☑ | ||
---|---|---|---|---|
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) Он менял запрос и статистика пересчитывалась сама :-)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |