Имя: Пароль:
1C
1С v8
Вопрос про индексы в 1с
,
0 Fragster
 
гуру
02.10.13
15:13
1. Индекс по одной колонке 50% (1)
2. Индекс по двум колонкам 50% (1)
Всего мнений: 2

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

А если создать критерий отбора - то индекс создастся из одной колонки - только значения реквизита.

Зачем так сделано?

Ну и голосовалка, что лучше :)
1 Fragster
 
модератор
02.10.13
15:14
ну и да - если поставить "с доп упорядочиванием" - то еще и поле представления туда запихается
2 H A D G E H O G s
 
02.10.13
15:18
"то создастся индекс, состоящий из 2-х колонок - самого реквизита и ссылки. "
Чтобы lookup не делать, чтобы получить ссылку из индекса.


В критерии отбора - ссылку из индекса получать не надо.
Попробуем плясать от этого?
3 Fragster
 
модератор
02.10.13
15:19
(2) почему не надо в критерии отбора?
4 H A D G E H O G s
 
02.10.13
15:19
(3) ХЗ.
5 Fragster
 
модератор
02.10.13
15:20
(4) ну реально, критерий отбора - это же не физическая таблица
6 Зойч
 
02.10.13
15:21
а что значит индекс с дополнительным упорядочиванием?
7 H A D G E H O G s
 
02.10.13
15:21
(3) Концепция в (0) прекрасна.
Ей (концепцией) надо ткнуть какого-нибудь Одавида, который кричал про убогость индексов в 1С.
Гораздо чаще надо получить Ссылку на Контрагнета по ИНН, чем Наименование контрагента по ИНН.
8 H A D G E H O G s
 
02.10.13
15:23
(5) Я не разбирался в критерии отбора.
9 H A D G E H O G s
 
02.10.13
15:24
Может там, при выполнении Критерия отбора - выбираются все поля записи и полюбому будет lookup, так нафига в индекс пихать Ссылку.
10 Зойч
 
02.10.13
15:25
(7) Гораздо чаще нужно получать ссылку на контрагента по инн и кпп ))
11 H A D G E H O G s
 
02.10.13
15:27
(10) Получите indexseek + lookup

Да, возможности Общих индексов на несколько полей не хватает в 1С, но да не критично.
12 GANR
 
02.10.13
15:32
А какой смысл делать отбор по значению реквизита, а затем еще и по ссылке внутри одного значения реквизита??? Кажется, что лучше...

Индекс по одной колонке
13 Fragster
 
модератор
02.10.13
15:51
вот так работает:

exec sp_executesql N'SELECT
T1.IDTRef,
T1.IDRRef
FROM (SELECT
P1 AS IDTRef,
T2._IDRRef AS IDRRef
FROM _Document142 T2 WITH(NOLOCK)
WHERE EXISTS(
SELECT 1
FROM _Document142_VT1884 T3 WITH(NOLOCK)
WHERE T2._IDRRef = T3._Document142_IDRRef AND (T3._Fld1886_TYPE = @P2 AND T3._Fld1886_RTRef = @P3 AND T3._Fld1886_RRRef = @P4))
UNION ALL SELECT
@P5 AS IDTRef,
T4._IDRRef AS IDRRef
FROM _Document187 T4 WITH(NOLOCK)
WHERE EXISTS(
SELECT 1
FROM _Document187_VT3790 T5 WITH(NOLOCK)
WHERE T4._IDRRef = T5._Document187_IDRRef AND (T5._Fld3800_TYPE = @P2 AND T5._Fld3800_RTRef = @P3 AND T5._Fld3800_RRRef = @P4))
UNION SELECT
@P5 AS IDTRef,
T6._IDRRef AS IDRRef
FROM _Document187 T6 WITH(NOLOCK)
WHERE EXISTS(
SELECT 1
FROM _Document187_VT3790 T7 WITH(NOLOCK)
WHERE T6._IDRRef = T7._Document187_IDRRef AND (T7._Fld3801_TYPE = @P2 AND T7._Fld3801_RTRef = @P3 AND T7._Fld3801_RRRef = @P4))
UNION ALL SELECT
@P6 AS IDTRef,
T8._IDRRef AS IDRRef
FROM _Document153 T8 WITH(NOLOCK)
WHERE T8._Fld7075_TYPE = @P2 AND T8._Fld7075_RTRef = @P3 AND T8._Fld7075_RRRef = @P4
UNION ALL SELECT
@P7 AS IDTRef,
T9._IDRRef AS IDRRef
FROM _Document161 T9 WITH(NOLOCK)
WHERE T9._Fld2657_TYPE = @P2 AND T9._Fld2657_RTRef = @P3 AND T9._Fld2657_RRRef = @P4
UNION ALL SELECT
@P8 AS IDTRef,
T10._IDRRef AS IDRRef
FROM _Document164 T10 WITH(NOLOCK)
WHERE T10._Fld2815_TYPE = @P2 AND T10._Fld2815_RTRef = @P3 AND T10._Fld2815_RRRef = @P4
UNION ALL SELECT
@P9 AS IDTRef,
T11._IDRRef AS IDRRef
FROM _Document165 T11 WITH(NOLOCK)
WHERE EXISTS(
SELECT 1
FROM _Document165_VT2894 T12 WITH(NOLOCK)
WHERE T11._IDRRef = T12._Document165_IDRRef AND (T12._Fld2896_TYPE = @P2 AND T12._Fld2896_RTRef = @P3 AND T12._Fld2896_RRRef = @P4))
UNION ALL SELECT
P10 AS IDTRef,
T13._IDRRef AS IDRRef
FROM _Document167 T13 WITH(NOLOCK)
WHERE T13._Fld2991RRef = @P4
UNION ALL SELECT
P11 AS IDTRef,
T14._IDRRef AS IDRRef
FROM _Document189 T14 WITH(NOLOCK)
WHERE EXISTS(
SELECT 1
FROM _Document189_VT3843 T15 WITH(NOLOCK)
WHERE T14._IDRRef = T15._Document189_IDRRef AND (T15._Fld3856_TYPE = @P2 AND T15._Fld3856_RTRef = @P3 AND T15._Fld3856_RRRef = @P4))
UNION ALL SELECT
@P3 AS IDTRef,
T16._IDRRef AS IDRRef
FROM _Document171 T16 WITH(NOLOCK)
WHERE T16._Fld3246_TYPE = @P2 AND T16._Fld3246_RTRef = @P3 AND T16._Fld3246_RRRef = @P4
UNION ALL SELECT
P12 AS IDTRef,
T17._IDRRef AS IDRRef
FROM _Document172 T17 WITH(NOLOCK)
WHERE T17._Fld3324_TYPE = @P2 AND T17._Fld3324_RTRef = @P3 AND T17._Fld3324_RRRef = @P4
UNION ALL SELECT
P13 AS IDTRef,
T18._IDRRef AS IDRRef
FROM _Document182 T18 WITH(NOLOCK)
WHERE EXISTS(
SELECT 1
FROM _Document182_VT3660 T19 WITH(NOLOCK)
WHERE T18._IDRRef = T19._Document182_IDRRef AND (T19._Fld3662_TYPE = @P2 AND T19._Fld3662_RTRef = @P3 AND T19._Fld3662_RRRef = @P4))) T1', N'P1 varbinary(4),@P2 varbinary(1),@P3 varbinary(4),@P4 varbinary(16),@P5 varbinary(4),@P6 varbinary(4),@P7 varbinary(4),@P8 varbinary(4),@P9 varbinary(4),P10 varbinary(4),P11 varbinary(4),P12 varbinary(4),P13 varbinary(4)', 0x0000008E, 0x08, 0x000000AB, 0xA3C51CAFF76F613D11E32B207D93C65A, 0x000000BB, 0x00000099, 0x000000A1, 0x000000A4, 0x000000A5, 0x000000A7, 0x000000BD, 0x000000AC, 0x000000B6
14 Fragster
 
модератор
02.10.13
15:53
т.е. даже не select top 1 where T15._Fld3856_TYPE = @P2 AND T15._Fld3856_RTRef = @P3 AND T15._Fld3856_RRRef = @P4 как я думал...
15 viktor_vv
 
02.10.13
15:56
Мне нравится объяснение (2). Сразу из индекса получают и ссылки, без поиска в основной таблице. Актуально для методов СправочникМенеджер типа Выбрать(),  НайтиПоРеквизиту() .

Индекс по двум колонкам
16 viktor_vv
 
02.10.13
15:58
(13) Это для критерия отбора, я так понял ?
17 Fragster
 
модератор
02.10.13
15:58
(16) ага. ничего, кроме значения реквизита и ссылки не юзается
18 viktor_vv
 
02.10.13
16:03
Жестко :), особенно когда в критерий отбора реквизит табличной части включен :).
19 Fragster
 
модератор
02.10.13
16:04
ну и да - при использовании индекса из одной колонки - сам размер индекса меньше пропорционально в n раз
20 H A D G E H O G s
 
02.10.13
16:07
(18) Критерии отбора не так часто используемы.
Выбрали оптимальное решение между
"Долго формируется структура подчинености"
"Долго пишуться документы и раздувается база"
21 viktor_vv
 
02.10.13
16:09
(20) Согласен.
22 viktor_vv
 
02.10.13
16:10
А вот методы менеджера используются чаще, пошли на компромисс, с размером индекса и скоростью записи, но получив более быстрое вполнение.
23 Fragster
 
модератор
02.10.13
16:19
(20) про структуру подчиненности что-нибудь слышал когда-нибудь?
24 Fragster
 
модератор
02.10.13
16:19
(23)+ у нас это один из основных инструментов
25 H A D G E H O G s
 
02.10.13
16:20
(23) Да, слышал.
А какие ко мне вопросы?
26 Fragster
 
модератор
02.10.13
16:22
(25) ну так вто в том-то и дело, если там будет только реквизит - то не будет ли это эффективнее в принципе (из-за того, что сами индексы в n раз меньше)
27 H A D G E H O G s
 
02.10.13
16:23
(23) Сам же сказал - пихать 2 столбца в индекс ведет к пропорциональному росту.

К чему бы это привело, строй структуру подчинности для типовой, к примеру, где ЗаказПоставщику может быть в ТЧ "Товары" ПТУ. Причем уже составного типа.
28 H A D G E H O G s
 
02.10.13
16:25
(26) А там и так только реквизит.
Мы же счаст про Критерий говорим?
29 Fragster
 
модератор
02.10.13
16:27
(28) я про стандартную крыжу "индексировать"
30 Fragster
 
модератор
02.10.13
16:27
(29) и про вариант замены ее на критерий
31 H A D G E H O G s
 
02.10.13
16:28
Счаст добавил индекс реквизиту в ТЧ документа.

1С сделал составной индекс - реквизит+ссылка
Странно.
32 viktor_vv
 
02.10.13
16:30
Я таки за то, что "Индексировать" создает составной инекс еще и с ссылкой с акцентом на более эффективное использование в методах менеджеров, имхо.
33 H A D G E H O G s
 
02.10.13
16:32
"в методах менеджеров"

объясните плиз.
34 viktor_vv
 
02.10.13
16:32
НайтиПоРеквизиту(), Выбрать() с отбором .
35 H A D G E H O G s
 
02.10.13
16:33
Я за то, чтобы делать как можно меньше индексов в
ТЧ, РС подчиненных документам, РН, РБ.
36 Fragster
 
модератор
02.10.13
16:33
(34) ну это же реально семерочный подход
37 H A D G E H O G s
 
02.10.13
16:33
Выбрать() с отбором не катит. Там весь объект получается.
38 Fragster
 
модератор
02.10.13
16:33
(35) дык это... зачем тогда в оплатах таб часть со ссылками на другие документы?
39 H A D G E H O G s
 
02.10.13
16:34
(38) Не понял фразу.
40 Fragster
 
модератор
02.10.13
16:35
(37) кстати да, было такое: v8: Техножурнал и событие LEAKS
если юзать из ссылки - то реально идет много записи на диск и расход оперативы большой
41 viktor_vv
 
02.10.13
16:35
(34) Для этих методов с такими индеком можно все потянуть из самого индекса. из (2) "Чтобы lookup не делать, чтобы получить ссылку из индекса.".
(36) Согласен. Но это надо разработчиков справшивать.
42 Fragster
 
модератор
02.10.13
16:38
43 Fragster
 
модератор
02.10.13
16:40
(41) выборка берет все данные, включая ТЧ, НайтиПоРеквизиту - да, ближе
44 H A D G E H O G s
 
02.10.13
16:41
(41) Ради НайтиПоРеквизиту() такое городить?

Надо давно забыть про эти методы, и выпилить их из платформы к херам, забив на обратную совместимость.

А также в модель ССЫЛКА добавить управление объектным кэшем, по умолчанию, отключенным.
45 viktor_vv
 
02.10.13
16:44
(44) ХЗ чеи руководствовались разработчики, я ж говорю ИМХО. Такие же составные индексы они и в семерке делали.
Может на уровне базы проще или быстрее lookup получается по такому индексу.
Это уже слишком глубоко для меня :).
46 viktor_vv
 
02.10.13
16:45
Явно не хватает Odavid в дискуссии, он бы сейчас все разложил по полочкам :))).
47 Fragster
 
модератор
02.10.13
16:46
просто вот думаю заменить нафиг все "индексировать" на критерии отбора, или нафиг?
48 H A D G E H O G s
 
02.10.13
16:47
49 H A D G E H O G s
 
02.10.13
16:47
(47) А ты хитер!
50 H A D G E H O G s
 
02.10.13
16:48
(47) Актуально для документов, ТЧ документов.

Справочники пусть живут.
51 H A D G E H O G s
 
02.10.13
16:49
А вот для регистров - не получиться.
52 Fragster
 
модератор
02.10.13
16:52
(49) вопрос в том, не будет ли выстрела в ногу от этого (так-то база уже под пол терабайта, индексы похудеют хоть)
53 H A D G E H O G s
 
02.10.13
16:54
(52) Вот и проверим!
54 H A D G E H O G s
 
02.10.13
16:54
ты, главное, не отмалчивайся потом.
Попроси водички и руки развязать, чтобы чиркнуть письмецо нам.
55 Зойч
 
02.10.13
16:57
А разве обычный индекс не всегда содержит кластерный ключ записи?
56 Зойч
 
02.10.13
16:57
иначе как от индекса переход к записи происходит
57 viktor_vv
 
02.10.13
16:58
(48) Ну где-то так и разложил бы :).
(52) Че-то глядя на (13) очень похоже на выстрел в ногу :).
Оно конечно, если в критерий из одного объекта только реквизит тянуть, то не так срашно.
58 viktor_vv
 
02.10.13
16:59
(55) Содержит, но если в запросе в выборке только поля, которые есть в индексе, то и переход не делается вообще, из индекса и берет значения.
59 H A D G E H O G s
 
02.10.13
17:01
очень похоже на выстрел в ногу :).


Похоже на выстрел в воздух.

Немного уменьшится база.
Немного увеличиться скорость записи документов.
60 Fragster
 
модератор
02.10.13
17:01
(57) я не предлагаю получать данные через критерии, я предлагаю через них организовать индексирование
61 H A D G E H O G s
 
02.10.13
17:02
Самый большой и тяжелый объект - страшила РБ в составе 2 штук в УПП. Его никак не замочишь.
62 H A D G E H O G s
 
02.10.13
17:02
(60) Это мы уже поняли.
63 Зойч
 
02.10.13
17:04
(55) хотя нет, не так. Индекс хранит номер страницы, а не ключ
64 Зойч
 
02.10.13
17:04
(61) и самый тормозной
65 viktor_vv
 
02.10.13
17:08
(58)+ Если я не ошибаюсь, это называется покрывающий индекс применительно к некоторому запросу.
66 Fragster
 
модератор
02.10.13
17:12
(65) да. вопрос в том, насколько стандартное индексирование (составное) обеспечивает это "покрывание"
67 H A D G E H O G s
 
02.10.13
17:16
(65) Слов то каких понапридумывали...
68 viktor_vv
 
02.10.13
17:19
(66) Вот для методов оно и обеспечивает "покрывание" :).
69 Fragster
 
модератор
02.10.13
17:19
(68) т.е. никогда не обеспечивает?
70 Bober
 
02.10.13
17:21
(66) если-бы это была киллер фича, то ее давно-бы юзали и заказали-бы у разработчиков платформы такой вид индексирования.
71 viktor_vv
 
02.10.13
17:24
(69) Ну для НайтиПоРеквизиту() должно покрывать, может в отборах в списках как-то помогает, ХЗ. А вообще, ощущение, что по инерции из семерки потянули.
Другого объяснения у меня нету, или не хватает знаний для понимания зачем сделали такие составные индексы для "Индексировать".
72 Fragster
 
модератор
02.10.13
17:27
(71) ну реально, сколько НайтиПоРеквизиту( в УПП?
73 viktor_vv
 
02.10.13
17:28
(70) Мне кажется разработчики не дают возможность делать произвольные составные индексы, дабы не давать обезьянам (образно) гранату в руки.
А то вместо оптимизации структуры данных или запросов, начнут лепить монструозные индексы, потом плач ярославны тормозит запись.
74 H A D G E H O G s
 
02.10.13
17:29
(73) Абсолютно такого же мнения.
75 Bober
 
02.10.13
17:30
(73) обезьяны уже получили гранату в виде запросов, после этого индексы не так страшны.
76 H A D G E H O G s
 
02.10.13
17:30
И update тоже не дают по этому же поводу.

А вот cast могли бы дать, че, жалко штоле?
77 viktor_vv
 
02.10.13
17:31
(72) Я ж говорю, я не знаю из каких соображений разработчики такие индексы создают.
Это было единственное объяснение пришедшее на ум, насчет методов.
78 H A D G E H O G s
 
02.10.13
17:31
(75) Фигня.

Запрос писать надо, думать.
А индекс - потыкал мышью - и вуаля - вот он!
79 Bober
 
02.10.13
17:32
(76) думаю, что update не дают, так как вся логика работы системы построена на работе в один момент с одним объектом.
И на текущий момент нет понимая как делать апдейт таблицы, если весь код работает с каждым объектом данных.
80 Bober
 
02.10.13
17:33
(78) Фингя. Открыл конструктор запроса - потыкал мышкой и вуаля - вот он!
81 Fragster
 
модератор
02.10.13
17:33
(73) никогда не видел конфы, в которых индексировать везде стоит стараниями "программиста"?
82 viktor_vv
 
02.10.13
17:34
(76) Вот с cast реально засада.
(75) Не, ну запросы приличные это хорошо. Если криво написан, не так сильны последствия, и быстрее исправить, чем здоровенный индекс, который используется в одном единственном запросе, зато пишется постоянно.
83 Bober
 
02.10.13
17:35
(82) Кривой индекс хорошо виден как и кривой запрос.
84 viktor_vv
 
02.10.13
17:36
(81) Не, такого не видел :).
Меня еще убивает, нахрена по умолчанию платформа при создании реквизита ставит использовать полнотекстовый поиск.
Может это можно где-то поправить, не знаю.
85 viktor_vv
 
02.10.13
17:39
(83) Это если хотеть его видеть, кривой индекс. А то будет как в (81).
86 viktor_vv
 
02.10.13
17:48
(60) Въехал. С точки зрения получения через критерий необходимого простого индекса в таблице, вполне имеет право на жизнь.
87 GANR
 
02.10.13
20:18
(15) Ах воооот оно как... Вот это, кстати, аргумент.
88 Fragster
 
модератор
02.10.13
20:32
(87) -> (66)(68)(69)
89 Зойч
 
02.10.13
20:46
Вот будет суперконфигуратор - там будет ВСЕ
90 viktor_vv
 
02.10.13
20:54
(88) кстати, есть еще одно потенциальное применение такого составного индекса, это сортировка списков по реквизиту. Учитывая что ссылка в индексе дает уникальность и обеспечивает постоянный порядок следования.
Хотя опять же, сортировка списка возможна по нескольким полям, и тут это преимущество теряется.
91 viktor_vv
 
02.10.13
20:56
(90)+ Вроде у меня уже фантазия заканчивается, где еще можно поиметь профит от такого составного индекса по реквизиту :).
92 Йохохо
 
02.10.13
21:22
(0) вроде же типа и ссылки. и все понятно, про вариант 2 viktor_vv рассказал, а вариант 1 для сравнения на равно и В
93 Fragster
 
модератор
02.10.13
21:34
(90) для сортировки - "индексирование с доп упорядочиванием", оно еще добавляет n колонок на представление
94 viktor_vv
 
02.10.13
21:45
(93) Ну почему только с доп упорядочиванием для сортировки. Если установить просто индексирование на реквизите, то быстрая сортировка тоже становится доступной.
95 viktor_vv
 
02.10.13
21:51
(94)+ А без ссылки в индексе, порядок сортировки в пределах одинакового значения реквизита был бы произвольным. И при допупорядочивания, все равно добавляют ссылку в индекс, опять же для обеспечения постоянного порядка следования в пределах одинакового значения реквизита и поля упорядочивания.
96 viktor_vv
 
02.10.13
22:02
(94) Упс. Это для справочников.
97 viktor_vv
 
02.10.13
22:06
(96)+ Точнее сказать, это для реквизитов примитивного типа у справочников и документов.
Вот с агрегатными уже ХЗ. Для сортировки реквизиты агрегатного типа с признаком Индексировать недоступны.
98 GANR
 
03.10.13
10:51
(88) Хм... С другой стороны получается, что индекс по 2-м колонкам может быть нужен лишь для Справочники.НашСправочник.НайтиПоРеквизиту(...). То есть, это может быть применимо в случаях, если

1. Мы уверены, что значение реквизита, которое мы задаем, встречается у одного и только одного элемента справочника НашСправочник.

2. Нам сгодится совершенно любой элемент справочника НашСправочник, имеющий заданное значение реквизита.

Вопросы:

1. Часто ли бывают ситуации описанные в п.1 и п.2 данного сообщения?

2. Какие еще могут быть ситуации, когда может быть индекс по 2-м колонкам (НашРеквизит, Ссылка) как при стандартном индексировании НЕ через критерий отбора?
99 GANR
 
03.10.13
10:54
+(98) >когда может быть индекс по 2-м колонкам
когда может быть НУЖЕН индекс по 2-м колонкам

Ужас! Почему на этом форуме нельзя просто подправить ошибку в сообщении?
100 Aswed
 
03.10.13
10:54
СТО!
101 Aswed
 
03.10.13
10:55
(99) 1С ошибок не прощает!
102 GANR
 
03.10.13
11:00
Fragster, viktor_vv что скажете на (98) ?
103 viktor_vv
 
03.10.13
11:00
(98) Я пока придумал еще тоько сортировку списков по реквизиту примитивного типа в (90).
104 GANR
 
03.10.13
11:08
(103) Ну еще можно п.3 добавить в (98) - когда нужно зачем-то получить список элементов НашСправочник, имеющих заданное значение реквизита не трогая при этом основную таблицу справочника.

НООО ведь, как правило, надо еще и хотя-бы Представление элемента получить (к примеру, для выпадающего списка)- значит надо не по 2-м, а по 3-м колонкам индекс делать - (НашРеквизит, Ссылка, Наименование).

P. S. Интересная ветка для людей, собирающихся сдавать "1С:Эксперт по технологическим вопросам крупных внедрений".
105 GANR
 
03.10.13
11:13
+(104) Вот для этого, вероятно, и нужно "Индексирование с доп. упорядочиванием" http://1cexpo.ru/informacziya/28-indeksy-tablicz-bazy-dannyx-1s-predpriyatie-82.html, что, в общем-то, уже говорилось в рамках данной ветки.
106 Fragster
 
модератор
03.10.13
11:14
(104) кстати, на представление многие забивают, а потом если профайлером глянуть - куча запросов тех самых представлений идет
107 viktor_vv
 
03.10.13
11:15
(102) Насчет ситуаций, когда это может понадобится для реквизита согласен. Но обычно индексировать имеет смысл ставить на реквизит с высокой уникальностью значений.
Насчет получить список элементов по значению реквизита, там выше давали насчет Выбрать() с отбором, получается тянет в выборку и остальные реквизиты, так что вряд ли тут выигрыш.
А НайтиПоРеквизиту() не возвращает список, а только первый найденный.
108 viktor_vv
 
03.10.13
11:18
(105) Не думаю что доп. упорядочивание для облегечения получения представления сделано. Имхо для получения необходимого порядка по индексу.
А представление по любому тянут потом отдельно, как в (106).
109 Bober
 
03.10.13
11:29
(106) для 8.3 уже не так актуально, ведь там можно делать свое представление.
110 GANR
 
03.10.13
11:31
(107) По-моему, в (98) чрезвычайно редкие ситуации. Вообще склоняюсь к тому, что
- Справочники.НашСправочник.Выбрать(...)
- Справочники.НашСправочник.НайтиПоРеквизиту(...)
выбросить надо из платформы - все что они могут, прекрасно делается запросами, да и редко они используются что-то.
ПолучитьСсылку() - считаю нужным оставить (!).
Насчет
- Справочники.НашСправочник.НайтиПоКоду(...)
- Справочники.НашСправочник.НайтиПоНаименованию(...)
спорный вопрос - штука весьма практичная, хотя и грязная (правда, я лично ими не пользуюсь - предпочитаю ПолучитьСсылку()).
111 Fragster
 
модератор
03.10.13
11:31
(109) ты думаешь, количество запросов к базе от этого уменьшится, если не получить в искомом запросе .Представление?
112 Bober
 
03.10.13
11:39
(111) если посмотреть как работает получение представления, то видно, что хватает и кластерного индекса объекта.
113 Fragster
 
модератор
03.10.13
11:42
(112) да. но есть разница, получить все одним запросом или получить ссылку, а потом 50 запросов, хоть и по кластерному индексу?
114 GANR
 
03.10.13
11:49
(112) Если заполнение справочника НашСправочник десятками тысяч элементов делается один раз и навсегда (ну, или раз в день добавляются элементы), а потом к нему в режиме онлайн идут запросы каждую минуту с отбором по тому или иному реквизиту (ИНН контрагента, артикул номенклатуры к примеру) то тут лишние обращения к физической таблице справочника совершенно ни к чему - пусть все необходимое ищется в таблице индекса.

(113) Может стоит добавить в голосовалку "Индекс по трем колонкам" (Реквизит, Представление, Ссылка)?
115 Bober
 
03.10.13
11:50
(113) а где у тебя 50 запросов идет?
116 viktor_vv
 
03.10.13
11:51
(110) Ну вот и есть ощущение, что для реквизитов индексирование сделали по образу и подобию с наименованием и кодом.
117 Fragster
 
модератор
03.10.13
11:52
(115) сделай так:
Запрос = Новый Запрос("Выбрать первые 50 Спр.Ссылка из Справочник.Номенклатура");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
  Сообщить(Выборка.Ссылка);
КонецЦикла;

и глянь профайлером, что происходит, когда ты этот код выполняешь
118 viktor_vv
 
03.10.13
11:54
(117)+1. И при получении данных в списках такая же хня скорее всего, даже если там только колонку с представлением оставить.
119 GANR
 
03.10.13
11:54
(117) Ага... Начинаю догадываться уже!
Или когда в отчет выводишь все это безобразие!
120 Bober
 
03.10.13
11:55
(118) нет, там иначе работает.
121 Bober
 
03.10.13
11:55
(117) ну если ты пишешь такой колхоз, то сам и виноват.
122 Fragster
 
модератор
03.10.13
11:55
(118)(119) ну, по крайней мере СКД умная
123 viktor_vv
 
03.10.13
11:57
(120)+(122) Ок.
124 GANR
 
03.10.13
11:57
(120) Кэш какой-то задействуется, что ли?
(122) Это СКД, а вот если "дедовским" способом...
125 Bober
 
03.10.13
11:58
(117) ведь ты сам знаешь, что система не вытаскивает представление при таком запросе, и будет его получать при таком коде, так же как и получение свойств через точку приводит к получению всего объекта из базы с последующим кэшированием этой какули.
126 Fragster
 
модератор
03.10.13
11:58
(121) ага, Сообщить("Недостаточно номенклатуры " + Номенклатура + " на складе " + Склад + " для выполнения операции") = +2 запроса к БД
127 Bober
 
03.10.13
11:59
(126) ну да, поэтому в типовых идет НоменклатураПредставление и СкладПредставление.
128 Bober
 
03.10.13
12:02
(122)(124) динамический список получает из базы данные по основному запросу, а потом бегает по таблицам объектов и собирает представления выводимых данных.
129 Fragster
 
модератор
03.10.13
12:03
(128) проверял?
130 GANR
 
03.10.13
12:05
(128) Ого! Это что еще за сырой деМОнический список?! Наверное недоработка разработчиков платформы 1С - надо написать на [email protected], если это так.
131 Bober
 
03.10.13
12:09
(129) нет, сам придумал
132 Bober
 
03.10.13
12:10
(130) в этой части не сырой. это такая оптимизация работы.
133 GANR
 
03.10.13
12:11
(132) Вот это да!!! В каком смысле оптимизиция !?
134 H A D G E H O G s
 
03.10.13
12:13
(133) Бобер просто попутал "Динамическое получение данных" с построчным получением представлений для ссылки, как было в обычных списках.
135 viktor_vv
 
03.10.13
12:15
(134) Так вроде ж я это и имел ввиду в (118), говорят не так.
Это наверное ще надо уточнять какие списки имеются ввиду УФ или в обычных формах.
136 Bober
 
03.10.13
12:16
(133) например динамический список вытягивает 10 различных ссылочных полей + какие-нибудь остатки и цены или например поле составного типа. После основного запроса, который все это вытягивает из базы, платформа по отдельности тащит представляния для каждого типа (выбрать наименование из .. где ссылка В (&Список)). А если-бы все это тянулось разом, то: это был-бы запрос-монтр и не факт, что оптимизатор sql не затупил-бы от такой "наглости".
137 viktor_vv
 
03.10.13
12:20
(136) Че-то мне кажется в основном запросе не так уж и напряжно это было.
Прилепили бы левых соединений туда, по индексированному полю ссылка.
138 H A D G E H O G s
 
03.10.13
12:20
Да, Бобер прав. Проверил.
Но хоть сразу, для всех одинакового типа, скопом. И это хорошо.

Динамическому не хватает Временных таблиц, это единственное что ему нужно. И что его спасет.
139 Bober
 
03.10.13
12:21
(134) (135) в динамическом списке обычных форм платформа сразу тащит представление левым соединением для всех ссылочных объектов.
140 GANR
 
03.10.13
12:21
(134)(136) Надо-же... Надо-бы проверить все эти утверждения/допущения посредством профайлера.
141 H A D G E H O G s
 
03.10.13
12:21
(140) Я проверил. Бобер прав.
142 GANR
 
03.10.13
12:22
(138) О! Кажется и проверять (140) уже не очень-то надо.
143 Bober
 
03.10.13
12:22
(118) почему у тебя при получении данных идут еще запросы с ходу не сказать, то думаю что пример в (117) даст тебе ответ.
144 viktor_vv
 
03.10.13
12:24
(143) Не. Это предположение было. Теперь понятнее.
145 viktor_vv
 
03.10.13
12:25
(138) Не будет скорее всего временных таблиц в динамическом. Слишком большие накалдные расходы.
146 Bober
 
03.10.13
12:25
(137) полностью согласен, но теперь можно ваять текст запроса для динамического списка и 1с перестраховывается. Они и сами 10 лет говорили, что динамический список <> отчет, а теперь в динамических списках сложные вычисления задолжности, расчет статусов и еще ведро всякого.
147 H A D G E H O G s
 
03.10.13
12:26
(145) В большие расходы - не верю. В то, что не будет - верю.
148 viktor_vv
 
03.10.13
12:26
(145)+ Как бы нафига такой список, где потребуется для вывода использовать временную таблицу. Это уже к отчету ближе.
149 H A D G E H O G s
 
03.10.13
12:27
(148) Остатки и последние цены.
150 H A D G E H O G s
 
03.10.13
12:28
Если уж 1С режет руки криворуким обезьянам - пусть режет их полностью и убирает Виртуальные таблицы.
151 viktor_vv
 
03.10.13
12:28
(147) Там ввод-вывод на диск идет. Ну да, может в кеше быть, но в общем случае, дополнительный ввод-вывод на диск не есть гуд, для настолько часто выполняемого запроса.
152 Bober
 
03.10.13
12:28
(149) там нужно подшаманить в параметрах вирт. таблиц расширением запросов СКД и будет хорошо работать без временных таблиц
153 H A D G E H O G s
 
03.10.13
12:29
(152) Никак там не подшаманишь, не глупи.
154 viktor_vv
 
03.10.13
12:30
(146) Согласен, перестраховываются. Это как с произвольными составными индексами. Технически, думаю, не сильно сложно их сделать, но боятся.
155 H A D G E H O G s
 
03.10.13
12:30
(151) Редко, когда памяти не хватает. Бред. Мелочи.
Не глупите.

Когда виртуальная таблица без фильтра просчитывается - там этих таблиц в 100500 раз больше пишется.
156 Bober
 
03.10.13
12:30
(153) могу позакать, ты охухеешь
157 H A D G E H O G s
 
03.10.13
12:31
(154) Скажу тебе больше - технически - все уже ПОЧТИ работает.
158 H A D G E H O G s
 
03.10.13
12:31
(156) Давай! Надеюсь, я тебя разозлил, и ты мне докажешь, что я не прав.
159 Bober
 
03.10.13
12:32
(158) не, не разозлил, я сам охухел, когда увидел результат.
160 H A D G E H O G s
 
03.10.13
12:32
Не нравиться, боятся, что будет писать на диск - можно заюзать #table - объект SQL чисто в памяти.
161 H A D G E H O G s
 
03.10.13
12:33
(159) Давай, не томи.

[email protected]
162 Никола_
Питерский
 
03.10.13
12:34
(159) Так так так, какой интересный поворот ))
163 viktor_vv
 
03.10.13
12:34
(157) Насчет предопределнных составных индексов в курсе, я имел ввиду технически дать возможность самим лепить в конфигураторе произвольные составные индексы. Проблем-то никаких, чисто боятся утонуть от обращений с криками все пропало шеф, все тормозит нещадно.
164 viktor_vv
 
03.10.13
12:37
(155) Как по мне для динамического списка было бы полезнее в selecte коррелированные подзапросы сделать.
165 Fragster
 
модератор
03.10.13
12:38
(161) не надо в почту, надо сюда
166 GANR
 
03.10.13
12:38
(163) Понаделают программисты 1С кучу индексов "на всякий случай" и... Все в этой ветке понимают что будет дальше.
167 viktor_vv
 
03.10.13
12:39
(166) Я о том же.
168 Bober
 
03.10.13
12:40
(161) фигульки в личку.
не так давно щупал динамические списки, и вот результат:
http://infostart.ru/public/169685/

пункт 4 и 5.
PS Единственное, что 1с не будет фиксить НО по пункту 4.
169 Никола_
Питерский
 
03.10.13
12:46
(168) Афигеть !
170 Bober
 
03.10.13
12:47
(163) думаю, что скоро такая фишка появится, как появился пункт "стандартные реквизиты". И туда перенесут, все настройки индексов.
171 H A D G E H O G s
 
03.10.13
12:48
Жесть.

А уж как я извращался, пытаясь основную таблицу в временную засунуть.
172 Bober
 
03.10.13
12:48
(169) Тролль!
173 H A D G E H O G s
 
03.10.13
12:52
Покажите это Евгению Щекину.