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

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

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

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

Ну и голосовалка, что лучше :)
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
Покажите это Евгению Щекину.