|
Влияет ли Индексация на скорость выполнения запроса | ☑ | ||
---|---|---|---|---|
0
Max1986
25.11.11
✎
12:21
|
сабж.
Есть типовая УПП 1.3.11. В Общем модуле есть большой и ветвистый запрос. Выполняется долго, идут на нем блокировки. Обращение идет к РH.ПартииТоваровНаСкладах и PC.СписанныеТовары. Если я поставлю у этих регистров у РH.ПартииТоваровНаСкладах у измерения Номенклатура в свойствах Индексировать и тоже самое у PC.СписанныеТовары у ресурса Склад - увеличит ли скорость выполнения запроса? |
|||
1
Max1986
25.11.11
✎
12:22
|
+(0) по этим данным идет отбор в предложении ГДЕ <...>
|
|||
2
ado
25.11.11
✎
12:23
|
Да.
|
|||
3
Defender aka LINN
25.11.11
✎
12:24
|
(1) "по этим данным идет отбор в предложении ГДЕ" - тебе ничего не поможет.
|
|||
4
Max1986
25.11.11
✎
12:25
|
(3)не понял
|
|||
5
Aloex
25.11.11
✎
12:27
|
Через ПВТ делай.
|
|||
6
Max1986
25.11.11
✎
12:27
|
вопрос еще.
Даже 2 1. Влияет ли Индексировать только на Измерение или также и на Ресурс. Так как в первом случае это измерение, а во втором - ресурс. |
|||
7
Max1986
25.11.11
✎
12:28
|
(5)Рад бы. Хотел пакет сделать. Но
1. эта процедура Общего модуля и вызывается отовсюду, при списании партий управленческого учета. 2. Придется ОЧЕНЬ МНОГО переделыть 2. Сказали не курочить сильно программу. Ищу малую кровь |
|||
8
Maxus43
25.11.11
✎
12:28
|
даже порядок измерений влияет на индексы
|
|||
9
Max1986
25.11.11
✎
12:32
|
(8)можно поподробнее? т.е. если первые 2 - часто используемые - то быстро?
Или порядок вызова в запросе после ВЫБРАТЬ <...> ? |
|||
10
Aloex
25.11.11
✎
12:34
|
(9) Порядок в конфигурации.
|
|||
11
Джинн
25.11.11
✎
12:35
|
Индексирование повышает скорость выполнения запросов. Особенно при отборах по индексированному полю. Но уменьшает скорость записи за счет накладных затрат на поддержание индексов. Ну и увеличивает объем базы.
|
|||
12
Max1986
25.11.11
✎
12:35
|
(11)понятно.
|
|||
13
hhhh
25.11.11
✎
12:35
|
(9) попробуй не к самим регистрам обращаться, а к виртуальным таблицам - остатки, обороты.
|
|||
14
Max1986
25.11.11
✎
12:36
|
(13)так и есть
|
|||
15
МихаилМ
25.11.11
✎
12:37
|
(0)
почитайте что-то, администрирование и проектирование ms-sql там куча примеров удачных и не удачных применений индексов в некоторых случаях доп индексы по 1 столбцу может даже существено замедлить выполнение запроса. напрмер на моей практике отбор по условию двух колонок, отдельно проиндескированных c одинаковой селективностью. приводил к table scan (ms sql 2000) вместо использования любого из них. но в запросах к бд можно указать подсказку , какой индекс использовать а у 1с в v8 c работой с индексами - беда. так что чисто экспериментально и причем на нагруженной системе, тк на ненагруженной отимизатор может выбрать другой план выполнения запроса. |
|||
16
ado
25.11.11
✎
12:38
|
(9) В профразработке подробно описано, какие индексы по дефолту создаются. В конце книжки где-то.
|
|||
17
Axel2009
25.11.11
✎
12:38
|
(0) установка индексации у двух измерений не поможет, потому как будет использоваться только один индекс
|
|||
18
hhhh
25.11.11
✎
12:39
|
(14) ну тогда отбор по номенклатуре ставь не в ГДЕ, а в параметрах виртуальной таблицы - раз в 15 быстрее будет без всякого индексирования.
|
|||
19
Fragster
гуру
25.11.11
✎
12:40
|
в типовой УПП запрос распределения по партиям ускоряется в 5 раз, если его переделать на временные таблицы
|
|||
20
GROOVY
модератор
25.11.11
✎
12:40
|
(14) Тогда индексация тебе не поможет. Так как значения измерений в виртуальных таблицах и так проиндексированы. Индексация о которой ты говоришь - это индексация реальной таблицы движения. Только скорость записи в регистр упадет.
|
|||
21
Axel2009
25.11.11
✎
12:43
|
(20)+ только проиндексированы они в порядке измерений в регистре. и если там первая стоит Организация, то индексы не помогут.
|
|||
22
Max1986
25.11.11
✎
12:43
|
(19)ВОТ! Этого и хочу!
|
|||
23
Max1986
25.11.11
✎
12:44
|
(19)в этом беда! люди вводят перемещения и списания и проч - все висит
|
|||
24
H A D G E H O G s
25.11.11
✎
12:44
|
(21) Там первая - Номенклатура стоит
|
|||
25
Max1986
25.11.11
✎
12:44
|
(20)>> Так как значения измерений в виртуальных таблицах и так проиндексированы.
Почему? Там нет индекса в Запросе |
|||
26
Max1986
25.11.11
✎
12:45
|
ВОТ БЕДА
Процедура ЗаполнитьЗапросПартийНаСкладахУпр(Запрос, ВестиПартионныйУчетПоСкладам, СтратегияСтатусПартии, СпособОценкиМПЗ) ПараметрыЗапроса_ДатаОприходования = ПолучитьДанныеДляЗапроса_ДокументОприходованияДата(СпособОценкиМПЗ,"ПартииТоваровНаСкладах"); Запрос.Текст = "ВЫБРАТЬ | СписанныеТовары.НомерСтрокиДокумента КАК НомерСтрокиДокумента, | ПартииТоваровНаСкладах.Номенклатура, | ПартииТоваровНаСкладах.ДокументОприходования КАК ДокументОприходования, | "+ПараметрыЗапроса_ДатаОприходования.ДокОприходованияДата_Выбор+" | ПартииТоваровНаСкладах.Склад, | ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры, | ПартииТоваровНаСкладах.СерияНоменклатуры, | ПартииТоваровНаСкладах.Качество, | ПартииТоваровНаСкладах.Заказ, | ПартииТоваровНаСкладах.КоличествоОстаток КАК Количество, | ПартииТоваровНаСкладах.СтоимостьОстаток КАК Стоимость, | ПартииТоваровНаСкладах.СтатусПартии, | ВЫБОР | КОГДА СписанныеТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры | ТОГДА 0 | ИНАЧЕ 1 | КОНЕЦ КАК ЧислоСерияНоменклатуры, | ВЫБОР | КОГДА СписанныеТовары.ДокументПартии = НЕОПРЕДЕЛЕНО | ТОГДА 0 | ИНАЧЕ ВЫБОР | КОГДА СписанныеТовары.ДокументПартии = ПартииТоваровНаСкладах.ДокументОприходования | ТОГДА 0 | ИНАЧЕ 1 | КОНЕЦ | КОНЕЦ КАК ЧислоДокументОприходования, | ВЫБОР | КОГДА СписанныеТовары.ЗаказПартии = НЕОПРЕДЕЛЕНО | ТОГДА 0 | ИНАЧЕ ВЫБОР | КОГДА ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ | ТОГДА 1 | ИНАЧЕ 0 | КОНЕЦ | КОНЕЦ КАК ЧислоЗаказ, | ВЫБОР | КОГДА ПартииТоваровНаСкладах.СтатусПартии = &НаКомиссию | ТОГДА 1 | ИНАЧЕ 0 | КОНЕЦ КАК ЧислоСтатусПартии |ИЗ | РегистрСведений.СписанныеТовары КАК СписанныеТовары | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки( | &Дат, Организация = &Организация И | Номенклатура В | (ВЫБРАТЬ | РегистрСведений.СписанныеТовары.Номенклатура | ИЗ | РегистрСведений.СписанныеТовары | ГДЕ | РегистрСведений.СписанныеТовары.Регистратор = &Ссылка)" + ?(ВестиПартионныйУчетПоСкладам, " | И (Склад В | (ВЫБРАТЬ | РегистрСведений.СписанныеТовары.Склад | ИЗ | РегистрСведений.СписанныеТовары | ГДЕ | РегистрСведений.СписанныеТовары.Регистратор = &Ссылка) ИЛИ Склад = &ПустойСклад)", "") + ") КАК ПартииТоваровНаСкладах | ПО СписанныеТовары.Номенклатура = ПартииТоваровНаСкладах.Номенклатура | И СписанныеТовары.ХарактеристикаНоменклатуры = ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры | И (ВЫБОР | КОГДА ПартииТоваровНаСкладах.Качество = &ПустоеКачество | ТОГДА ИСТИНА | ИНАЧЕ ВЫБОР | КОГДА СписанныеТовары.Качество = &ПустоеКачество | ТОГДА ПартииТоваровНаСкладах.Качество = &КачествоНовый | ИНАЧЕ ПартииТоваровНаСкладах.Качество = СписанныеТовары.Качество | КОНЕЦ | КОНЕЦ) | " + ?(ВестиПартионныйУчетПоСкладам, "И (ПартииТоваровНаСкладах.Склад = СписанныеТовары.Склад ИЛИ ПартииТоваровНаСкладах.Склад = &ПустойСклад)", "") + " | И (ВЫБОР | КОГДА СписанныеТовары.ДопустимыйСтатус1 <> &ПустойСтатус | ИЛИ СписанныеТовары.ДопустимыйСтатус2 <> &ПустойСтатус | ИЛИ СписанныеТовары.ДопустимыйСтатус3 <> &ПустойСтатус | ИЛИ СписанныеТовары.ДопустимыйСтатус4 <> &ПустойСтатус | ТОГДА ПартииТоваровНаСкладах.СтатусПартии = &ПустойСтатус | ИЛИ ПартииТоваровНаСкладах.СтатусПартии = &СтатусПартииПоОрдеру | ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус1 | ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус2 | ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус3 | ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус4 | ИНАЧЕ ИСТИНА | КОНЕЦ) | | И (ВЫБОР | КОГДА СписанныеТовары.СписыватьТолькоПоЗаказу = ИСТИНА | ТОГДА ВЫБОР | КОГДА ПартииТоваровНаСкладах.Заказ <> СписанныеТовары.ЗаказПартии | ТОГДА ВЫБОР | КОГДА (НЕ СписанныеТовары.ЗаказПартии = НЕОПРЕДЕЛЕНО) | ТОГДА ЛОЖЬ | ИНАЧЕ ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ | КОНЕЦ | ИНАЧЕ ИСТИНА | КОНЕЦ | ИНАЧЕ ВЫБОР | КОГДА ПартииТоваровНаСкладах.Заказ <> СписанныеТовары.ЗаказПартии | ТОГДА ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ | ИНАЧЕ ИСТИНА | КОНЕЦ | КОНЕЦ) | И (СписанныеТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры | ИЛИ ПартииТоваровНаСкладах.СерияНоменклатуры = &ПустаяСерияНоменклатуры) |ГДЕ | СписанныеТовары.Регистратор = &ОсновнойДокумент | |УПОРЯДОЧИТЬ ПО | ЧислоСерияНоменклатуры, | ЧислоДокументОприходования, | ЧислоЗаказ, | ЧислоСтатусПартии" + ?(СтратегияСтатусПартии = Перечисления.СтретегииСписанияПартийТоваровПоСтатусам.СначалаПринятыеПотомСобственные, " Убыв", "") + ", | "+ПараметрыЗапроса_ДатаОприходования.ДокОприходованияДата_Сортировка+" | ДокументОприходования" + ?(СпособОценкиМПЗ = "ЛИФО", " Убыв","") + ", | ПартииТоваровНаСкладах.Склад |ИТОГИ ПО | НомерСтрокиДокумента"; КонецПроцедуры // ЗаполнитьЗапросПартийНаСкладахУпр() |
|||
27
ado
25.11.11
✎
12:45
|
(20) Ну, я б не стал так категорично. Скорость построения виртуальных таблиц опять таки может зависеть от индексации таблиц реальных.
|
|||
28
Max1986
25.11.11
✎
12:46
|
+(26)видите сколько внутренних запросов. Именно на нем и висяк.
Мучаюсь |
|||
29
Axel2009
25.11.11
✎
12:46
|
(26) беда вот тут
И (СписанныеТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры | ИЛИ ПартииТоваровНаСкладах.СерияНоменклатуры = &ПустаяСерияНоменклатуры) |
|||
30
Axel2009
25.11.11
✎
12:46
|
(29)+хотя там беда вообще беда. никаких индексов не будет использоваться
|
|||
31
H A D G E H O G s
25.11.11
✎
12:46
|
И вот тут
Номенклатура В | (ВЫБРАТЬ | РегистрСведений.СписанныеТовары.Номенклатура | ИЗ | РегистрСведений.СписанныеТовары | ГДЕ | РегистрСведений.СписанныеТовары.Регистратор = &Ссылка)" + ?(ВестиПартионныйУчетПоСкладам, " | И (Склад В | (ВЫБРАТЬ | РегистрСведений.СписанныеТовары.Склад | ИЗ | РегистрСведений.СписанныеТовары | ГДЕ | РегистрСведений.СписанныеТовары.Регистратор = &Ссылка) |
|||
32
Max1986
25.11.11
✎
12:47
|
(31)Это я уже нашел
|
|||
33
Max1986
25.11.11
✎
12:47
|
+(32)думаю как обойти
|
|||
34
Max1986
25.11.11
✎
12:47
|
(29)почему - поясни плиз!
|
|||
35
H A D G E H O G s
25.11.11
✎
12:47
|
Вообще over 9000 перетиралась проблема - идем в поиск, и смотрим Fragster-овские решения по временным таблицам.
|
|||
36
ado
25.11.11
✎
12:48
|
(31) Ага, мне тоже эти "В" сразу не понравились.
|
|||
37
acsent
25.11.11
✎
12:48
|
(29) Почему беда? Думаешь сиквел не умеет такое разворачивать в Серия В (...)?
|
|||
38
Axel2009
25.11.11
✎
12:49
|
(31) это не такая фигня, как после Склад идет ИЛИ Склад = &ПустойСклад)
|
|||
39
Axel2009
25.11.11
✎
12:49
|
(37) потому что ИЛИ - скан индекса по-любому.
|
|||
40
Лефмихалыч
25.11.11
✎
12:54
|
(0) не, ее придумали для солидности - чем больше галочек в конфигурацторе, тем солиднее выглядит
|
|||
41
Fragster
гуру
25.11.11
✎
13:08
|
(39) нет
|
|||
42
Axel2009
25.11.11
✎
13:09
|
(41) давай пример где да!
|
|||
43
Max1986
25.11.11
✎
13:11
|
(29)т.е. плохо потому что идет "ИЛИ ПартииТоваровНаСкладах.СерияНоменклатуры = &ПустаяСерияНоменклатуры" ?
|
|||
44
Fragster
гуру
25.11.11
✎
13:12
|
(43) плохо - потому что весь запрос фиговый
|
|||
45
Max1986
25.11.11
✎
13:14
|
(44)Знаю! Писала фирма 1с!
Хуже всего, что он исользуется постоянно массой документов |
|||
46
Fragster
гуру
25.11.11
✎
13:15
|
ПартииТоваровНаСкладах.Склад = СписанныеТовары.Склад ИЛИ ПартииТоваровНаСкладах.Склад = &ПустойСклад
кстати, можно заменить на ПартииТоваровНаСкладах.Склад В (СписанныеТовары.Склад, &ПустойСклад) немного иногда помогает. но это капля в море по сравнению с тем, что идет сначала соединение, а потом отбор через ГДЕ |
|||
47
Fragster
гуру
25.11.11
✎
13:15
|
(45) нет, просто эти запросы писались на 8.0, где временных таблиц не было, а переписывать никто не берется, поскольку "работает - не трожь!"
|
|||
48
Max1986
25.11.11
✎
13:17
|
(46) >> но это капля в море по сравнению с тем, что идет сначала соединение, а потом отбор через ГДЕ
n/t EGG тормозит а написано так как сами же говорят нельзя |
|||
49
Max1986
25.11.11
✎
13:17
|
n/t EGG = т.е. УПП
|
|||
50
Fragster
гуру
25.11.11
✎
13:18
|
(42) перепутал со сканом таблицы. индекс скан да, идет всегда, если критичное место - заменяю на объединение
|
|||
51
Max1986
28.11.11
✎
13:29
|
А как можно переделать запрос в (26) - точнее кусок (31) в пакет?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |