Имя: Пароль:
1C
1С v8
Условия в запросе. Чем больше их тем медленнее результат
,
0 arsik
 
гуру
31.10.18
14:50
Поясните знающие камрады. Если в запросе только 1 условие результат моментальный, 100 миллисекунд, если добавить еще условия то запрос выполняется уже раз в несколько медленнее.
Вот пример:
ВЫБРАТЬ
    КОЛИЧЕСТВО(CRM_ВзаимодействияСКлиентом.Период) КАК Период
ИЗ
    РегистрСведений.CRM_ВзаимодействияСКлиентом КАК CRM_ВзаимодействияСКлиентом
ГДЕ
    CRM_ВзаимодействияСКлиентом.Ответственный = &Ответственный //Условие 1
    И CRM_ВзаимодействияСКлиентом.ПодразделениеОтветственного = &ПодразделениеОтветственного //Условие 2
    И CRM_ВзаимодействияСКлиентом.СтатусРегистратора = &СтатусРегистратора //Условие 3

Если оставить только "Условие 1" - быстро, если добавить еще 2 и 3 то медленно. Почему?
Все поля в условиях индексированные.
Это норма или что то не так работает?
1 1Сергей
 
31.10.18
14:53
А виртуальными таблицами почему не пользуетесь?
2 Джинн
 
31.10.18
14:54
Все зависит от конкретной ситуации. В общем виде да, скорость падает. Насколько - зависит от массы факторов в конкретном случае. И далеко не факт, что Ваши индексы применяются вообще.
3 Fragster
 
гуру
31.10.18
14:54
статистика живая? или база вообще файловая?
4 unregistered
 
31.10.18
14:54
(1) А как и какими виртуальными таблицами в данном случае?
5 d4rkmesa
 
31.10.18
14:54
(0) Статистика?
6 H A D G E H O G s
 
31.10.18
14:56
(0)
mdop=0
или
статистика
7 palsergeich
 
31.10.18
14:58
(0) а структуру регистра можно? со всеми галочками ИНДЕКСИРОВАТЬ. Очень похогже на то что при первом условии есть отдельный индекс, а вот при втором оптимизатор уже не может хороший план подобрать
8 иубиповец
 
31.10.18
14:59
Может еще какие индексы есть, структуру можно.
9 иубиповец
 
31.10.18
15:00
Попробуйте запрос с тремя условиями раздилить на объединить 3 запроса и в каждом по одному условию, будет быстрее или так же?
10 palsergeich
 
31.10.18
15:00
1C:CRM, редакция 3.0 (3.0.7.1) я такого запроса не нашел.
11 palsergeich
 
31.10.18
15:00
Ой такого регистра
12 arsik
 
гуру
31.10.18
15:01
(5) (6) Возможно статистика. Не могу пока сказать, доступа к скулю нет.
mdop=0  - это что?
13 Fragster
 
гуру
31.10.18
15:03
(9) там И, а не ИЛИ
14 palsergeich
 
31.10.18
15:03
Структуру регистра дай со всеми галками индексировать, тогда может получится сванговать
15 youalex
 
31.10.18
15:03
(0) >>Все поля в условиях индексированные.

Для поиска по индексу - эти поля должны входить в один индекс. А если эти поля - реквизиты/ресурсы, то по каждому полю строится свой,  отдельный индекс: Поле+Измерение1-N

Поэтому одно условие (по одному полю) может быстрее отрабатывать.
16 Timon1405
 
31.10.18
15:06
покажите скрин структуры регистра по измерениям
17 arsik
 
гуру
31.10.18
15:13
(7) В нем много полей и записей около 60 миллионов. Почти все поля индексированы.
Вот структура. Желтым индексные поля.
https://i.imgur.com/hVaRqK7.png
18 DrZombi
 
гуру
31.10.18
15:17
(17) Индексы не работают :)

https://its.1c.ru/db/metod8dev/content/1590/hdoc

+ навсякой

Регистр сведений
Непериодический регистр сведений
Индекс

Условие и описание

[ОРРХ | ОРНР1 +] Измерение1 + [Измерение2 +...] (Кластерный)

Есть хоть одно измерение регистра.
Индекс, включающий все измерения в том порядке, в котором они заданы при конфигурировании.
Индекс кластерный, если регистр независимый.

[ОРРХ | ОРНР1 +] ИзмерениеN + Измерение1 + [Измерение2 +...]

Измерению "ИзмерениеN" задано свойство "Индексировать" или свойство "Ведущее" и при этом это не первое и не единственное измерение.
Индекс, включающий все измерения. Первое поле - ИзмерениеN, затем все остальные измерения в том порядке, в котором они заданы при конфигурировании.

[ОРРХ | ОРНР1 +] Реквизит + Измерение1 + [Измерение2 +...]

Реквизиту "Реквизит" задано свойство "Индексировать".
Индекс в котором первое поле - Реквизит, затем все измерения в том порядке, в котором они заданы при конфигурировании.

[ОРРХ | ОРНР1 +] SimpleKey

Количество измерений больше одного. Используется для обхода регистра при реструктуризации, а также для выборки записей с использованием оптимального порядка обхода.

[ОРРХ | ОРНР1 +] Ресурс + Измерение1 + [Измерение2 +...]

Ресурсу "Ресурс" задано свойство "Индексировать".
Индекс в котором первое поле - Ресурс, затем все измерения в том порядке, в котором они заданы при конфигурировании.

Периодический регистр сведений
Индекс

Условие и описание

[ОРРХ | ОРНР1 +] Период + [Измерение1 + ...] (Кластерный)

Всегда.

[ОРРХ | ОРНР1 +] Измерение1 + [Измерение2 +...] + Период

Есть хоть одно измерение регистра.
Индекс, включающий все измерения в том порядке, в котором они заданы при конфигурировании и поле Период.

[ОРРХ | ОРНР1 +] ИзмерениеN + Период + Измерение1 + [Измерение2 +...]

Измерению "ИзмерениеN" задано свойство "Индексировать" или свойство "Ведущее" и при этом это не  единственное измерение.
Индекс, включающий поле Период и все измерения. Первое поле - ИзмерениеN, затем поле Период, затем все остальные измерения в том порядке, в котором они заданы при конфигурировании.

[ОРРХ | ОРНР1 +] Реквизит + Период + [Измерение1 + ...]

Реквизиту "Реквизит" задано свойство "Индексировать".
Индекс в котором первое поле - Реквизит, затем поле Период, затем все измерения в том порядке, в котором они заданы при конфигурировании.

[ОРРХ | ОРНР1 +] Ресурс + Период + [Измерение1 + ...]

Ресурсу "Ресурс" задано свойство "Индексировать".
Индекс в котором первое поле - Ресурс, затем поле Период, затем все измерения в том порядке, в котором они заданы при конфигурировании.
19 DrWatson
 
31.10.18
16:06
Предположение 1. Старая статистика. SQL решает использовать другой индекс, получает по нему кучу записей, гораздо больше чем планировалось. И как следствие появляется неоптимальный скан для проверки остальных условий.
Предположение 2. Такой запрос исполняется не первый раз, причем до этого с другими параметрами он был быстрее. С этими параметрами старый план оказался неоптимальным с теми же сканами для проверки условий.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.