Имя: Пароль:
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С - надо написать на v8@1c.ru, если это так.
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) Давай, не томи.

liveups@yandex.ru
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
Покажите это Евгению Щекину.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс