Имя: Пароль:
1C
1С v8
ОФФ: Индексация полей в запросах.
0 Error pro
 
16.11.11
10:19
Всем привет, нашел статью по оптимизации запросов а именно индексации. Возник вопрос имеет ли смысл индексировать какое либо поле вот в таком пакете (В регистре 2 измерения(Номенклатура,склад) и 2 ресура(Сумма,Кол-во)) :
                 
|ВЫБРАТЬ
                  |    ОстаткиНоменклатурыОстатки.Номенклатура КАК Номенклатура,
                  |    ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК КоличествоОстатокНаВсехСкладах
                  |ПОМЕСТИТЬ ОстатокНаСкладах
                  |ИЗ
                  |    РегистрНакопления.ОстаткиНоменклатуры.Остатки(
                  |            &МоментВремени,
                  |            Номенклатура В
                  |                (ВЫБРАТЬ РАЗЛИЧНЫЕ
                  |                    ДокТЧ.Номенклатура
                  |                ИЗ
                  |                    ДокТЧ КАК ДокТЧ)) КАК ОстаткиНоменклатурыОстатки
                  |
                  |ИНДЕКСИРОВАТЬ ПО
                  |    Номенклатура
                 
К решению задачи есть требование индексации полей. Искал в книге знаний какие-либо статьи про индексацию - не нашел, если можете тыкните. Спасибо.
1 Ненавижу 1С
 
гуру
16.11.11
10:21
зависит от контекста где это используется
кстати слово РАЗЛИЧНЫЕ тут не нужно
2 Error pro
 
16.11.11
10:21
(1) Да, уже убрал, я группирую ДокТЧ в первом пакете.
3 Max1986
 
16.11.11
10:22
а как к OFF это относится
4 Error pro
 
16.11.11
10:22
(1) В данном запросе нужно индексировать?
5 Maxus43
 
16.11.11
10:23
в книжках написано что индексировать желательно все поля, на которые накладываются потом условия или по которым идут соединения
6 Ненавижу 1С
 
гуру
16.11.11
10:24
(4) я не знаю как это используется потом
7 Megas
 
16.11.11
10:25
(6) + 100
(2) Тоже смотрю и думаю, думаю.
А вообще (5)

А ещё если разных записей мало то можно и не индексировать
8 Error pro
 
16.11.11
10:25
(5) Спасибо, а я читал что  индекс будет работать всегда при
отборе значения, 0,64% и меньше от общего
количества строк, в ином случае будет полное сканирование таблицы

(6) Потом эта таблица левым соединением присоединяется по полю номенклатура
9 Maxus43
 
16.11.11
10:28
(8) я именно про временные таблицы, в обычных запросах СУБД сама решает как использовать индексы
10 Error pro
 
16.11.11
10:31
(9)Ясно, спасибо, лишняя индексация на производительность в худшую сторону никак не скажется?
11 acsent
 
16.11.11
10:32
(10) конечно скажется
12 Maxus43
 
16.11.11
10:33
время на индексацию конечно затрачивается, но зависит всё от частной ситуации как всегда. Если таблица большая и с ней соединения например, то время индексации окупиться с лихвой
13 Axel2009
 
16.11.11
10:34
(8) МС Скуль индекс будет срабатывать если выборка идет 33% значений
порой имеет смысл творить покрывающий индекс, чтобы сервер не тратил время на позиционирование строки в основной таблице
14 Error pro
 
16.11.11
10:34
(12) как я понял из (5) и (9) индексировать имеет смысл только виртуальные таблицы?
15 Maxus43
 
16.11.11
10:36
(14) Только временные таблицы ты и можеш принудительно индексировать, остальное тупо не сможеш, нет там закладок индексации, рулит СУБД
16 Axel2009
 
16.11.11
10:36
(14) нет
17 Error pro
 
16.11.11
10:38
(15) Ясно, то есть в сабже имеет смысл написать индексацию если дальше по полю номенкалтура будет соединение?
(16) А какие еще?
18 Maxus43
 
16.11.11
10:41
(17) да, или если условие будет. Так написано в настольной библии.
19 Error pro
 
16.11.11
10:42
(18) Спасибо всем. Вопрос снят)
20 Axel2009
 
16.11.11
10:50
(17) каждый случай индивидуальный.
21 Error pro
 
16.11.11
10:55
(20) Ну есть же какие-то общие рекомендации к использованию индексации?
22 Error pro
 
16.11.11
10:56
+(21) как описали в (5)
23 Maxus43
 
16.11.11
11:00
(22) в книжке прочитай сам, я дословно не помню, но общий смысл в этом. Для вирт таблиц из 10-ти записей есно индексация не критична
24 Error pro
 
16.11.11
11:03
(23) Ну конечно нужно понимать и учитывать уникальность записей, а книжка называется описание встроенного языка?
25 Maxus43
 
16.11.11
11:07
26 НЕА123
 
16.11.11
11:09
(21)
читай теорию.
формула времени выполнения приблизительно такая
С + О(N)
где С - время построения индекса = константа(почти, естественно, зависит от колва записей, но при больших N функция О(N) незаметно), N - колво операций.
при N = 0, 1 очевиден только вред индексирование. Для N = 2 - уже непонятно.
Для больших N - индексация обязательна.
27 Error pro
 
16.11.11
11:09
(25) дома лежит такая, седня вечером внимательно гляну
28 Error pro
 
16.11.11
11:12
(26) спасибо, то что при N = 0, 1 очевиден только вред индексирования я уже понял.
29 Axel2009
 
16.11.11
11:16
(21) общая рекоммендация - рассматривать КАЖДЫЙ случай индивидуально. это относится к скуль серваку. остальные не знаю, я не юзаю.
30 Axel2009
 
16.11.11
11:17
(26) тоже не обязательно. если идет отбор по кластерному индексу, то я лучше выберу 3 раза из него, чем сформирую времянку и на нее навешу индекс и по нему проводить отбор.
31 Axel2009
 
16.11.11
11:18
(28) далеко не факт. порой создание временной таблицы помогает оптимизатору правильно использовать индексы в условиях невозможности воздействия на этот самый план запроса.
32 Error pro
 
16.11.11
11:19
(29) Кстати по поводу использования, коллега который летом сдал спеца, тоже утверждает что использовать смысла нет.
33 Megas
 
17.11.11
09:51
(32) Смотря где. Скорость запроса увеличивается в десятки раз. К примеру с индексами 3 сек без индексов 30 сек.