Имя: Пароль:
1C
1С v8
Индексирование временных таблиц
,
0 eandrs
 
28.10.11
13:17
На бескрайних просторах инета неоднократно встечался со статьей, описывающей причины неоптимальной работы запросов. В данной статье присутствует такая фраза: "В качестве индексных полей следует указать все поля, которые используются в условии соединения". Воспользовавшись данной рекомендацией и получил неожиданный результат: итоговое время выполнения пакета запросов после добавления индексов увеличилось. Где-то в 1,5 раза. Естественно, индексы пихал не во все подряд временные таблицы, а лишь в те, которые заведомо будут весьма большими. Хотелось бы узнать у гуру оптимизации - в каких случая всё-таки следует производить индексацию конкретного поля, и для каких полей индексация будет заведома бессысленна? В общих чертах механизм работы индексов представляю, однако тыканье носом в теорию поощряется.
1 ДенисЧ
 
28.10.11
13:19
Учти... Чем больше индексов, тем медленнее вставка. И создание больших индексов - тоже время...
2 Ненавижу 1С
 
гуру
28.10.11
13:19
если поле будет иметь болшОе количество значений, то индексация приветствуется, если вообще поле уникально, то обязательна прямо таки
наоборот, если значений у поля немного, то она бессмыслена, например булево
3 Fragster
 
гуру
28.10.11
13:20
(2) если вообще поле уникально все авно работает быстрее, ибо по индексу таки сортируется
4 H A D G E H O G s
 
28.10.11
13:20
Вот и БРАТ на Мисте появился.
Смахнул скупую слезу. :*(

Растет молодежь.
5 Ненавижу 1С
 
гуру
28.10.11
13:23
(3) во временной таблице то? ктож ее проиндексирует
6 eandrs
 
28.10.11
13:23
А ещё такой момент. При создании индекса по нескольким полям для временной таблицы, как понимаю, - создается составной индекс. Соответственно будет иметь значение - в каком порядке идут поля. В этом случае как будет оптимальней - наверх помещать поля с большим количеством возможных значений, или наоборот?
7 Ненавижу 1С
 
гуру
28.10.11
13:25
(6) порядок в составном индексе определяется его использованием
8 Fragster
 
гуру
28.10.11
13:25
(7) в 1с нет составных индексов
9 Fragster
 
гуру
28.10.11
13:26
(8)+ в ВТ
10 Fragster
 
гуру
28.10.11
13:26
(5) ты не поверишь, но 1с это таки умеет
11 Kashemir
 
28.10.11
13:28
Что мешает проиндексировать временные таблицы ?
12 Sammo
 
28.10.11
13:30
Если время на составление индекса превышает время, которое сэкономится за счет его использования, то индекс нафиг не нужен...

P.S. правда может получиться, что неправильный в данном случае был выбран индекс.
13 Serginio1
 
28.10.11
13:31
14 Serginio1
 
28.10.11
13:32
(13) Единственно по убыванию нельзя сортировать, для чисел поле приходиться вводить с обратным знаком
15 eandrs
 
28.10.11
13:34
(7) А можно по-подробней?
16 ДенисЧ
 
28.10.11
13:34
(14) чо?
17 Serginio1
 
28.10.11
13:36
(16) На SQL ты можешь задать в составном индексе сортировку по убыванию, в 1С нет
18 ДенисЧ
 
28.10.11
13:36
(17) а, я понял твою мысль.
19 Fragster
 
гуру
28.10.11
13:38
(13) ткни в номер поста, чтоли, а то не вижу создание индекса из профайлера что-то
20 Serginio1
 
28.10.11
13:38
(17) А может и путаю, но чегото не нашел "Убыв", и не экспереентировал
21 Fragster
 
гуру
28.10.11
13:39
(19) именно составного
22 Serginio1
 
28.10.11
13:39
(19) 40
23 Fragster
 
гуру
28.10.11
13:53
(22) гед там индексирование временных таблиц?
24 Inform
 
28.10.11
13:55
(0) индексировать надо только те поля на которые далее будут накладываться условия, либо по ним будут происходить соединения таблиц.

Естественно речь о приросте производительности идет только в том случае, когда время создания индекса не стремится к времени выполнения запроса, т.е. это актуально для большого объема данных.
25 Serginio1
 
28.10.11
14:40
(23)
ПОМЕСТИТЬ РеализацияТоваровУслугТовары
ИЗ
   Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ

  РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ ДАТАВРЕМЯ(2011, 1, 1) И ДАТАВРЕМЯ(2011, 8, 16)
ИНДЕКСИРОВАТЬ ПО
   Ссылка,
   Сумма,
   Количество
;
26 Fragster
 
гуру
28.10.11
14:45
(25) где это в терминах SQL, чтобы говорить о том, что индексы составные, а не отдельные?
27 Serginio1
 
28.10.11
14:57
(26) А почему должно быть иначе.Возьми профайлер и проверь. У меня таким образом формируются  таблицы с десятками миллионов записей. Если бы индексы были не составными, то на их создание уходило гораздо больше времени чем сейчас около минуту.
28 H A D G E H O G s
 
28.10.11
15:20
Составной индекс делается.
Реллакс.

create index [TMPIND_0] on [#tt1] (_Q_000_F_001, _Q_000_F_002, _Q_000_F_003)

INSERT INTO #tt1 (_Q_000_F_000RRef, _Q_000_F_001, _Q_000_F_002, _Q_000_F_003) SELECT
T1._IDRRef,
T1._Fld8,
T1._Fld9,
T1._Fld10
FROM _Reference7 T1 WITH(NOLOCK)
29 H A D G E H O G s
 
28.10.11
15:20
"ВЫБРАТЬ
|    Справочник1.Ссылка,
|    Справочник1.Реквизит1 КАК Реквизит1,
|    Справочник1.Реквизит2 КАК Реквизит2,
|    Справочник1.Реквизит3 КАК Реквизит3
|ПОМЕСТИТЬ Временная
|ИЗ
|    Справочник.Справочник1 КАК Справочник1
|
|ИНДЕКСИРОВАТЬ ПО
|    Реквизит1,
|    Реквизит2,
|    Реквизит3";
30 Serginio1
 
28.10.11
16:04
(29) Спасибо.