Для чего НЕ нужны индексы

Публикация № 444987 16.01.16

Приемы и методы разработки - Механизмы платформы 1С

MS SQL Индекс Селективность Индексирование

Индекс лишним не бывает? Чем больше индексов, тем лучше? А не проиндексировать ли это измерение на всякий случай? Если подобные вопросы иногда возникают в вашей голове, то эту статью прочитать было бы весьма полезно.

Итак, традиционное мнение, что "Индекс это хорошо, а блокировка это плохо", часто бывает неверным до противоположности.
Картинка выше, которую я выбрал для заголовка статьи, очень часто напоминает многие базы 1С, которые неожиданно начинают "быстро расти"и "тормозить".
Но прежде чем перейти к сути, придётся немного покопаться в теории.

Что такое индексы, для чего они нужны, какие они бывают?

    Далее будет немного теории, объясняемой простым языком. Если все эти вопросы вам давно известны и вы считаете, что нет необходимости в таком примитивном объяснении, то вы, наверное, слишком редко заглядывали в доработки конфигураций, да что и говорить, в типовые конфигурации 3-4 летней давности, в любом случае, этот раздел всегда можно пропустить.

Итак, как работает индекс? Наверное, все в детстве играли в игру "угадай число"? Кто-то загадал число от 1 до 50, а вам его нужно угадать за наименьшее число вопросов.
Как вы будете его угадывать? Перебором: "Это 1? Это 2? Это 3?". Скорее всего, вы будете задавать вопросы вида: "Оно больше 25?". И только когда вариантов останется около 2-3, вы будете перебирать возможные.
Т.е. поступите примерно так, как показано на картинке:




В ВУЗ-е мы уже узнаём, что подобные структуры называются графами, вернее, даже разновидностью графа - деревьями. Бывают ещё более вырожденные разновидности деревьев, так называемые B-деревья.
Собственно, они и лежат в основе большей части индексов.

Хотя, конечно, не большей. Индексы делятся на два типа: кластерные и не кластерные.
Конечно, можно вспомнить, что есть битовые индексы, функциональные индексы, XML индексы.
Но принципиальным отличаем будем считать физическую организацию и принцип работы.

Кластерный индекс - это по сути дела не индекс, а определенным образом организованная таблица. В Oracle его, к примеру, вообще называют Index Organized Table или IOT.

Некластерный индекс - это отдельная структура, как правило, вида B-дерева, которая создаётся дополнительно к основной таблице.

Если вы сейчас думаете, что эти два вида индексов придумали ИТ специалисты, то вы сильно ошибаетесь.

Вот так выглядит кластерный индекс, который появился ещё до появления компьютера:



А как-то вот так, соответственно, некластерный:





Данная аналогия оказывается на удивление полной.
Каким образом вам бы удобнее было искать? Сразу выбрать страницу, начиная с той буквы, которая указана на срезанных полях,
или сначала заглянуть в предметный указатель, потом узнать там номер страницы и уже искать нужную страницу по номеру?
Конечно, первый способ куда удобнее. Но вот только не очень он гибкий... обычно на полях ставят только буквы.
Нельзя написать целое слово или несколько слов, в то время как в предметном указателе их можно организовать как угодно.

Кроме того, предметный указатель по сути ссылается на номера страниц книги, на которых расположена нужная информация.
Сами номера страниц являются при этом по сути кластерным индексом.


Теперь давайте посмотрим уже более детально, применительно к MS SQL Server:

В MS SQL существуют 2 физических операции Index Seek и Index Scan. Index Seek - это хорошо, Index Scan - плохо.
Index seek означает просмотр индекса в порядке упорядочивания, либо по B-Дереву, Index Scan - обычная операция просмотра всех
записей таблицы, аналогичная всем известной Table Scan. Чаще всего данная операция присутствует в случае "неполного покрытия" индекса,
Если в индексе, к примеру, есть поле "Контрагент, Номенклатура" а отобрать записи надо по "контрагенту, номенклатуре и заказу покупателя".
В этом случае в плане запроса MS SQL можно будет увидеть что-то вида:



Т.е. сначала по индексу были выбраны записи, соответствующие покрытию, а остаток записей был получен полным последовательным просмотром таблицы.



А если мы сделаем у таблицы не кластерный индекс, то в итоге увидим примерно следующую картину:
 



Тут есть ещё одна интересная операция - RID Lookup, занимающая целых 50% времени - столько же, сколько поиск по индексу.

Собственно, дополнительная операция требуется из-за того, что некластерный индекс не производит выборку по самой физической таблице, следовательно, требуется ещё сам поиск нужной физической страницы, чтобы считать сами данные.

Но в данном случае есть ещё одна специфика - это слово "Heap", указанное в скобках операции. Но о нём далее.


Чем плохи индексы?

1) Накладные затраты при записи данных

Очевидно, что для поддержания какой-либо дополнительной структуры данных, либо определенной организации данных, требуется совершать дополнительные действия.
Действий не так много, накладные затраты на них небольшие. Но плохо то, что эти затраты и действия возникают при записи данных. А запись данных происходит в транзакции.
Хуже если в транзакции происходит и запись и чтение данных (контроль остатков). В этом случае индекс должен быть всегда в актуальном состоянии.

Затраты на запись или чтение в транзакции намного "дороже" внетранзакционных издержек. Дело в том, что запись может вестись строго последовательно, и время на фиксацию изменений в БД сократить достаточно сложно. Более мощное оборудование тут не всегда помогает.

Внетранзакционное же чтение данных может вполне успешно выполняться параллельно, при этом в случае увеления количества запросов на чтение данных, к примеру, вследствие роста количества пользователей, то они вполне могут решиться наращиванием аппаратных ресурсов.


2) Накладные затраты на обслуживание индексов 

При интенсивной записи данных в таблицу данные индексов к ней не всегда распологаются на той странице, на которой должны. Появляются "пропуски", физическая структура индексов становится неэффективной. Поэтому иногда бывает необходимо производить дефрагментацию индексов. Производительность запросов к СУБД во время дефрагментации, соответственно, падает. Есть ещё процесс полного перестроения индексов - но в современных версиях MS SQL необходимости выполнения данной операции по регламенту нет.

3) Влияние индексов на размер базы
Не самое страшное последствие, но так или иначе если база весит 150-200 ГБ, то об этом надо уже задуматься. Для средней OLTP базы размер индексов, как правило, превышает объём самой базы.
Не верите? Вполне можете воспользоваться какой-либо обработкой вроде этой: //infostart.ru/public/19463/ и посмотреть, сколько же в вашей базе места занимают индексы.

4) Затраты на создание и поддержание актуальной статистики
Статистику в базе нужно регулярно обновлять при интенсивных операциях вставки и обновления. Это занимает вычислительные ресурсы, хоть и не влияет непосредственно на процесс.
Неактуальная статистика может привести к проблемам производительности системы.

Но это не значит, что индексы - это плохо, без них СУБД были бы бесполезны. Плохи индексы, которые не используются.



Как оптимизатор выбирает, какой индекс ему использовать? (статистика, плотность, селективность, кардинальность)

Итак, про то, что "статистика должна быть" и "её нужно обновлять", слышали, наверное, все.
Многие даже знают, что нужно обновлять статистику, наизусть помнят запрос:

EXEC sp_MSForEachTable 'UPDATE STATISTICS ? WITH FULLSCAN;'

Главное - не забыть, что хитрый MS SQL кэширует планы запроса, которые он уже раз посчитал. Даже если статистика изменится,
для того, чтобы что-то заработало по-другому, надо бы выполнить:

DBCC FREEPROCCACHE

Но гораздо реже люди заморачиваются с тем, чтобы посмотреть статистику БД. Давайте попробуем это сделать на тестовой таблице:

Сделаем в БД простейшую таблицу следующего вида:
 



Потом выполним:

DBCC SHOW_STATISTICS('TAB', NAME)
 



Оказывается, сколько всего сохраняется для такой маленькой таблицы. Интересен ещё тот факт, что вы же не выполняли никакого кода по созданию статистики.
Если статистика для таблицы не отключена, то она создаётся сама. И это тоже ложится на накладные расходы.

Сейчас нам интересен в этой таблице столбец Density - Плотность записей. Плотность рассчитывается как


Плотность = Число дубликатов в колонке / Общее число записей в таблице

И является одним из самых выжных статистических показателей данных в таблице. Очевидно, что чем меньше плотность записей, тем эффективнее можно будет воспользоваться индексом.
А при плотности 0.5, как в приведённом примере, индекс в принципе вообще не нужен. Чем ниже в таблице значение Density, тем более правильно спроектирована данная таблица.
Для СУБД лучше всего таблицы с уникальными записями. Обратите внимание на столбец All density - его значение уже 0.25. Это означает, что в таблице есть ещ одна колонка. Для MS SQL этот показатель важен, когда вы пишете "СГРУППИРОВАТЬ ПО".

Но плотности записей оптимизатору недостаточно. Основная задача оптимизатора - "догадаться", сколько строк вернёт запрос.
Допустим, у нас в базе куча складов по всем регионам - небольшие торговые точки + виртуальные склады. И есть один центральный склад.
Плотность по складу будет достаточно неплохая. Но вот число строк по центральному складу, которое вернёт запрос, и по региональному будет различаться в тысячи раз.

Для этого есть показатель селективности:

Селективность=число строк удовлетворяющих предикату/всего строк в таблице

Предикат - определенное условие.
Из картинки выше селективность определяется в третьей таблице. Там указан "ключ" - RANDE_HI_KEY и соответственно количество строк ему соответствующее... и количество значений, ему соответствующее в таблице.

Ну, и остался последний показатель статистики:

Кардинальность - это и есть предположительное число строк, которое вернёт запрос

В каждом элементе плана запроса этот показатель присутствует.
Если навести на элемент плана запроса курсор, то его можно увидеть во всплывающей подсказке примерно так:
 




Итак, если итоговый запрос возвращает половину таблицы или около того, то индекс тут совсем не нужен.
Вспомним УТ 10.2, 10.1, даже 10.3, по-моему... В каждом документе был индекс по полю "Организация". В последних версиях его нет. Как думаете, почему?

Индекс также бесполезен, если оптимизатор MS SQL решает, что итоговый запрос вернёт половину таблицы или вроде того.
Почему MS SQL так может решить, вроде разобрались.


Теперь самое время разобраться, какие индексы есть в 1С:

Всё просто. Все объекты 1С делятся на ссылочные (у которых есть ссылка и, соответственно, GUID) и табличные (регистры).
У всех таблиц 1С есть кластерный индекс.
У ссылочных кластерный индекс создаётся по ссылке (GUID) - это самая быстрая выборка, которая только может быть.
У табличных кластерный индекс создаётся по всем изменениям. Что тоже предельно логично. И, конечно, этот индекс уникальный.

А как же затраты на запись? Зачем создавать кластерный индекс везде?
Дело тут в том, что так работает MS SQL. В стандартной таблице просто должен быть кластерный индекс.
Без него выборка из этой таблицы будет приводить к тому, что операция поиска записи по индексу (как было на картинке выше) будет занимать непростительно много времени.
В MS SQL таблицы без кластерного индекса называют Heap Table - куча. Что примерно соответствует их физической организации.
Тем не менее, такие таблицы могут быть важны. Если у вас 99% операций в этой таблице - запись, а для анализа этих данных вы, к примеру, применяете отдельное OLAP решение.
Поэтому возможность убирать кластерные индексы из таблиц очень бы не помешала разработчикам 1С.


Когда вы ставите у какого либо реквизита, ресурса или измерения объекта 1С признак "индексировать" - создаётся дополнительный или обновляется существующий не кластерный индекс для этой таблицы.

Включая реквизиты объекта в критерий отбора, вы также создаёте по ним отдельный индекс.

Это лишь общие правила, по которым платформа создаёт индексы на уровне СУБД. В каких-то деталях они могут отличаться, тем более в разных версиях платформы.

К счастью, 1С не пожадничали и дали нам инструмент, чтобы структуру БД просматривать - я про фукнкцию "ПолучитьСтруктуруХранения()".
Умельцы этой функцией воспользовались и сделали для неё неплохой интерфейс, которым можно вопспользоваться, чтобы точно посмотреть, какие же есть индексы у таблицы:

//infostart.ru/public/147147/ 


Зачем я всё это прочитал?

Что делать простому разработчику 1С?

Простой разработчик в отличие от оптимизатора MS SQL может заранее предсказать, какие будут данные в запросе, какие будут предикаты и какие нужны индексы.
Что же нужно делать, чтобы ваши запросы выполнялись быстро и при этом при записи данных в БД это не приводило к перезаписи нескольких десятков бесполезных индексов.

  1. Делайте индексы, покрывающие предикаты, если данный запрос планируется к использованию достаточно часто. Но не забудьте, что уже существуют кластерные индексы.

  2. Если находится индекс, уже покрывающий предикат в запросе, не создавайте нового индекса.

  3. Если индекс покрывает почти всё условие запроса - оцените число записей, которое придётся перебрать СУБД при данной выборке, если оно невелико (менее нескольких тысяч) - не создавайте нового индекса

  4. Определите селективность и/или плотность записей в выборке так, как их определит в данном случае оптимизатор. Если в итоговой выборке получится много записей по отношению к общему числу записей в таблице - не создавайте индекса, он лишний

  5. Когда пишете запрос, думайте о том, как его будет анализировать оптимизатор, сможет ли он корректно посчитать ориентировочное число строк, возвращаемое каждой частью запроса.

  6. В конце концов проверьте план полученного запроса, если он вам действительно важен, особенно если данный запрос нужно выполнять в транзакции.

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. tormozit 6516 17.01.16 10:23 Сейчас в теме
Опечатка "выжных"->"важных"
2. gislink 37 17.01.16 11:15 Сейчас в теме
Почитал с удовольствием. Есть еще программисты, способные просто и доступно разъяснять непростые для понимания вещи. Большое спасибо.
prohorp; Yasasha; Veetavas; purgin; assanoff; Бубузяка; fishca; +7 Ответить
3. tormozit 6516 17.01.16 12:13 Сейчас в теме
Хорошо бы еще про использование в индексах полей типа Булево рассказать.
4. dmpas 17.01.16 12:28 Сейчас в теме
У всех таблиц 1С есть кластерный индекс.

А как же регистры расчёта?
Vladimir_Konyrev; Yashazz; comol; AlX0id; +4 Ответить
8. comol 4641 17.01.16 22:33 Сейчас в теме
(4) baton_pk, Честно забыл про них, пока пусть так повесит, сам просвещусь какие там индексы и поправлю :)
13. Irwin 383 18.01.16 14:29 Сейчас в теме
(4) baton_pk, не только регистры расчета. Если регистр сведений периодический (кроме по подчинению регистратору) и у него нет измерений, то кластерный индекс также не создается. Платформа 8.3.7
14. dmpas 18.01.16 15:51 Сейчас в теме
(13) Irwin,
8.3.7 я ещё не смотрел, но ИТС пишет следующее:

Периодический регистр сведений

Индекс: [ОРРХ | ОРНР1 +] Период + [Измерение1 + ...] (Кластерный)
Условие и описание: Всегда.


PS. Или имелся ввиду НЕпериодический?
19. Irwin 383 18.01.16 16:53 Сейчас в теме
(14) baton_pk, как раз периодический, но без измерений (исключая периодичность по позиции регистратора).
15. comol 4641 18.01.16 16:03 Сейчас в теме
(13) Irwin, (14) baton_pk, Для этого я написал
Это лишь общие правила, по которым платформа создаёт индексы на уровне СУБД. В каких-то деталях они могут отличаться, тем более в разных версиях платформы.
5. AlX0id 17.01.16 14:03 Сейчас в теме
В MS SQL существуют 2 физических операции Index Seek и Index Scan. Index Seek - это хорошо, Index Scan - плохо.
Index seek означает просмотр индекса в порядке упорядочивания, либо по B-Дереву, Index Scan - обычная операция просмотра всех
записей таблицы, аналогичная всем известной Table Scan. Чаще всего данная операция присутствует в случае "неполного покрытия" индекса,
Если в индексе, к примеру, есть поле "Контрагент, Номенклатура" а отобрать записи надо по "контрагенту, номенклатуре и заказу покупателя". 

Это ваще что?
Зачем умные ребята из микрософт понаделали "хороших" и "плохих" операторов? Почему не сделали только хороших?
Индекс скан будет использоваться в случае "неполного покрытия"?? О_О
9. comol 4641 17.01.16 22:35 Сейчас в теме
(5) AlX0id,
Зачем умные ребята из микрософт понаделали "хороших" и "плохих" операторов

Ну ребята то сделали только хорошие операторы... Будь воля MS SQL он бы всегда делал только Index Seek. Но вот прикладные разработчики 1С регулярно вынуждают его пользоваться index scan :)
6. Painted 41 17.01.16 16:50 Сейчас в теме
А еще индекс не нужен для маленьких таблиц. Интересно вот с какого размера индекс начинает себя оправдывать?
10. comol 4641 17.01.16 22:35 Сейчас в теме
(6) Painted,
Интересно вот с какого размера индекс начинает себя оправдывать
Опытным путём 2000 было в MS SQL... по крайней мере в 2008 так.
7. ivanov660 3370 17.01.16 19:17 Сейчас в теме
Вспомним УТ 10.2, 10.1, даже 10.3, по-моему... В каждом документе был индекс по полю "Организация". В последних версиях его нет. Как думаете, почему?

Как на счет включения в базе ограничения по RSL с ограничением по полю организация? Как написано в методике от 1С: при выполнении запросов в которых происходит соединение, условие и т.п. по полям, то соответствующие поля должны быть проиндексированы. Так в итоге индексы должны быть?
11. comol 4641 17.01.16 22:41 Сейчас в теме
(7) ivanov660,
включения в базе ограничения по RSL с ограничением по полю организация
RLS конечно :). Тут всё зависеть будет опять же от селективности... условия соединения. 1С в методике "не лезли в дебри" а написали как будет верно в общем случае. Если у вас в базе 10-ок организаций SQL соединит эти таблицы вложенными циклами, и просмотрев всю таблицу и будет полностью прав, следовательно индекс там не сдался. Но это не отменяет того что RLS вам внесёт полный хаус в запросы к БД и что в итоге получится надо смотреть только в профайлере :)
12. Yashazz 4268 18.01.16 14:13 Сейчас в теме
Ну что, книжку Филиппова пополам с методичкой с "1С-Эксперта" более-менее пересказал в общих чертах, молодец.
...интересно, долго ещё на Инфостарте будет пользоваться такой популярностью завуалированный плагиат?
qwinter; starik-2005; +2 5 Ответить
16. comol 4641 18.01.16 16:15 Сейчас в теме
(12) Yashazz,
завуалированный плагиат

Источники не книжка Филиппова, в которой эти вопросы незаслуженно упущены.

Был такой сайт - SQLCMD... там человек оочень подробно объяснял селективность, плотность, кардинальность. Сейчас сайт закрыли, у меня только архив остался.
В русскоязычном варианте аналогов не видел.

Оcновной англоязячный источник: Inside the SQL Server Query Optimizer - Benjamin Nevarez
И Grant Fritchey, SQL Server Query Perfomance Tuning

+ личный опыт конечно.

Вы видимо из статьи прочитали только начало (теорию) и конец (краткие рекоммендации), которые есть везде, но лишними не будут.
nekotina; d4rkmesa; mytg; mvxyz; Krio2; fzt; fancy; charushkin; tormozit; +9 Ответить
18. Sergey.Noskov 1261 18.01.16 16:50 Сейчас в теме
(16)
Был такой сайт - SQLCMD... там человек оочень подробно объяснял селективность, плотность, кардинальность. Сейчас сайт закрыли, у меня только архив остался.
В русскоязычном варианте аналогов не видел.

В текстовом формате действительно информации мало. На techdays есть видео доклад "О самой частой причине выбора нестабильного/неэффективного плана запроса, или Оценка Кардинальности: что это такое, и как с ней бороться" в двух частях от Алексея Эксаревского про кардинальность, оценку стоимости запроса и все что с этим связано. Много, местами скучновато но подробно и с примерами.
20. comol 4641 18.01.16 17:41 Сейчас в теме
21. dmpas 18.01.16 17:58 Сейчас в теме
(20)

беглый гуглёж дал вот это:
http://www.oszone.net/17922/
http://www.oszone.net/17920/

Там можно скачать видео и презентацию. Сам не смотрел ещё.

Кстати, советую ещё Pro SQL Server Internals - чтиво очень хорошо проясняет картину мира.
22. tormozit 6516 18.01.16 18:05 Сейчас в теме
(21) Качество плохое. Я тоже не нашел выше качества. Видимо это оригинал =(
23. comol 4641 18.01.16 18:57 Сейчас в теме
(22) tormozit, (21) baton_pk, (18) Sergey.Noskov,
Как Сергей писал загуглил на teachdays.
Оригинал наверное тут:
https://www.techdays.ru/videos/4309.html
https://www.techdays.ru/videos/4310.html

И ещё до кучи: https://www.techdays.ru/videos/4303.html

Ещё наверное полезно было бы SQLCMD архив выложить. Сайт закрыт, поэтому наверное ни чьи (с) я не нарушу.

Плюсаните пост, пусть вверх всплывёт, глядишь кто-нибудь ещё прочитает и станет больше суммарных знаний в мире 1С :)
А архивчик со статьями только в самом посте внизу подцепился :(
Прикрепленные файлы:
_sql_cmd.rar
val_lime; st4rk; akR00b; BomjBandit; roman72; EVKash; ajax_new; mega; mvxyz; nvv1970; alex3067; SirStefan; agro23; Danil.Potapov; WizaXxX; oleg21592; TreeDogNight; Arrigo; gaglo; ikekoval; zzz14; Sergey.Noskov; AlX0id; Bronislav; ivanov660; _Z1; tormozit; +27 Ответить
24. _Z1 38 18.01.16 22:13 Сейчас в теме
(23) Спасибо за архив.
Жалко только что нет комментариев к статьям.
в комментариях тоже были очень ценные сведения.

По статье в чем то Вы не совсем правы. ( но обсуждение этого на мой взгляд принесет
вреда больше чем пользы - тем более это Ваша статья - Ваше виденье ms sql )
26. Sergey.Noskov 1261 19.01.16 13:39 Сейчас в теме
(23) да, это те самые ссылки, качества лучше не нашел, но это не принципиальный момент.
По индексам так же есть отличный доклад Дмитрия Короткевича https://www.techdays.ru/videos/4303.html новичкам в разработке (особенно уверенным что чем больше индексов тем лучше) смотреть обязательно.
27. comol 4641 19.01.16 19:08 Сейчас в теме
(26) Sergey.Noskov, Пасиб. Включил в "заплюсованый" пост. Судя по всему соберём инфу в комментах и включу в основную статью :)
17. Sergey.Noskov 1261 18.01.16 16:19 Сейчас в теме
(12) Yashazz, базовые знания из области архитектуры СУБД вы считаете плагиатом методичек?
25. ivanov660 3370 18.01.16 23:10 Сейчас в теме
Архивчик сайта занятный, только что-то устарело с 2013 года, жалко нет обновления.
28. Gilev.Vyacheslav 1888 19.01.16 23:17 Сейчас в теме
(0)
3) Если индекс покрывает почти всё условие запроса - оцените число записей, которое придётся перебрать СУБД при
данной выборке, если оно невелико (менее нескольких тысяч) - не создавайте нового индекса

садись, два, приходи к нам на курсы, расскажем про дедлоки
mitia.mackarevich; +1 Ответить
32. comol 4641 20.01.16 11:06 Сейчас в теме
(28) Gilev.Vyacheslav,
расскажем про дедлоки
А заодно прочитаем про версионник? :)
35. dmpas 20.01.16 11:17 Сейчас в теме
(32)
А заодно прочитаем про версионник? :)

Заодно вспомним, что не все сидят на 8.3 с отключенным режимом совместимости.
36. comol 4641 20.01.16 11:24 Сейчас в теме
(35) baton_pk, Ну я ещё до 8.3 писал что нужно бы включать: http://infostart.ru/public/91879/ и 8.3 тут не причём, если не полениться то можно сделать "жизнь чуть более приятной".
37. dmpas 20.01.16 11:32 Сейчас в теме
(36)
людям, которые не понимают такой элементарщины в индексах, лучше не пытаться
сделать "жизнь чуть более приятной".


чревато волной статей "как я гордо восстанавливал базу после своих кривых рук"
Gilev.Vyacheslav; +1 Ответить
61. Gilev.Vyacheslav 1888 21.01.16 20:49 Сейчас в теме
(32) не пори чушь, на запись версионник не поможет
63. comol 4641 21.01.16 22:43 Сейчас в теме
(61) Gilev.Vyacheslav, Оу
придётся перебрать СУБД при
данной выборке
речь то про чтение оказывается ;)
67. Gilev.Vyacheslav 1888 22.01.16 09:22 Сейчас в теме
(63) покажи мне базу данных, в которую данные не пишутся, а как у тебя записи в таблице возникают, селектом? или рассказываешь про удобную часть, а неудобная за рамками статьи?
68. comol 4641 22.01.16 13:01 Сейчас в теме
(67) Gilev.Vyacheslav, Ну ты же изначально писал про дедлоки... которые возникают потому что при переборе записей они блокируются...
Так вот, в версионнике такая блокировка не приводит к дедлоку.

У меня в режиме версионирования дедлоки только при обменах возникают... Но с ними разделаться получилось только отказавшись от обменов :)
69. Gilev.Vyacheslav 1888 22.01.16 16:10 Сейчас в теме
(68) я изначально писал что глупость рекомендовать "не создавать индексы", провоцируя захват избыточных данных
если в каком-то режиме не будет дедлоков, то вылезет таймаут/отсутвие версии или прочая "неприятность".

Не надо писать "не создавайте индексов если мало записей", не вводи в заблуждение людей.
70. comol 4641 24.01.16 14:47 Сейчас в теме
(69) Gilev.Vyacheslav,
таймаут/отсутвие версии или прочая "неприятность"
ну на практике у меня таких "неприятностей" не возникало, когда лишние индексы посносил.

Не надо писать "не создавайте индексов если мало записей"
по-моему это дискуссионный вопрос... а не "истина в последней инстанции".
Потому как
приоритеты задач тоже имеют значение

29. Andreynikus 1204 20.01.16 00:18 Сейчас в теме
Спасибо, хорошая статья, но есть несколько замечаний.
1. Вы написали
«Index Scan - обычная операция просмотра всех
записей таблицы, аналогичная всем известной Table Scan. Чаще всего данная операция присутствует в случае "неполного покрытия" индекса»


Здесь сразу несколько заблуждений.
1.1. Очень часто разработчики путают понятия покрывающего индекса и индекса подходящего под условия. Покрывающий индекс – это индекс который содержит в себе все поля возвращаемые в запросе, т.е. поля из раздела ВЫБРАТЬ. А индекс не подходящий под условия это как раз то, что вы описали.
1.2. Операция Scan всегда означает полный (а не частичный) просмотр всей таблицы или индекса, единственное исключение это когда в запросе есть ключевые слова ВЫБРАТЬ ПЕРВЫЕ тогда скан будет не всей таблицы/индекса, а только первых записей. Частичный скан в плане запроса будет выглядеть как оператор Seek но с условием Where, в графическом плане появится раздел Predicate.
2. По поводу чистки кэша после обновления статистики, сейчас SQL Server достаточно умный что бы самостоятельно перекомпилировать планы для тех таблиц, по которым было обновление статистики, не нужно этого делать еще раз.
3. У временных таблиц по умолчанию нет индексов. У регистра расчета нет кластерного индекса, но это все мелочи и можно посмотреть через вышеуказанную обработку.
4. Я бы дополнил статью разбором ситуаций, когда индекс есть но не может быть использован из-за неоптимально написанного запроса.
akR00b; Danil.Potapov; m.s.moiseev; oleg21592; temsan; Yashazz; gadjik; tormozit; Vladimir_Konyrev; Gilev.Vyacheslav; +10 1 Ответить
33. comol 4641 20.01.16 11:14 Сейчас в теме
(29) Andreynikus, 1.1 ну по контексту понятно наверное... неполное покрытие условий индекса имелось ввиду
1.2 так и написано вроде...
2 Тестил на 2012 - нифига он этого не делал. В SQLCMD человек тестил на 2008 - не делал. Поэтому ваше утверждение что "сейчас MS SQL достаточно умный"... можно трактовать как "кому достаточно, а кому не достаточно". 2014 ещё дааалеко не у всех, и просто не проверял.
3 Ну конечно ориентировочно. Про регистры рассчетов забыл и уже указали
4 Этих ситуаций разбор это ещё на статью... притом не одну... Даже вон люди курсы отдельные придумали. Моя цель была чуть углубиться в работу оптимизитора... чтобы такие ситуации люди смогли разбирать сами...

38. Andreynikus 1204 20.01.16 11:35 Сейчас в теме
(33)
2. А как вы тестили перекомпиляцию если не серкрет? На моих тестах все перекомпилирутся, главное что бы план был не тривиальный. Тем более что в документации MS SQL написано что после обновления планы будут перекомпилироваться https://msdn.microsoft.com/ru-ru/library/ms190397(v=sql.120).aspx а документации Microsoft в отличии от документации 1С в большинстве случаев можно верить :)

4. Насчет отдельных курсов на эту тему, можете ссылку кинуть?
39. comol 4641 20.01.16 14:07 Сейчас в теме
(38) Andreynikus,
На моих тестах все перекомпилирутся
Да ладно? :))) Создайте табличку, создаёте руками левую статистику, создаёте индекс и вызываете предполагаемый план выполнения. ИМХО если бы при каждом запросе к СУБД MS SQL пересчитывал статистику и перекомпилировал планы выполнения запросов вы бы наслаждались песочными часиками большую часть времени своей работы. Более детально в (23) архивчик скачайте и там есть эта тема подробно. SQL 2012/2008 работает точно так.

Про курсы это к Гилёву он там уже выше что-то предлагал в этом роде :)
40. Andreynikus 1204 20.01.16 14:24 Сейчас в теме
(39)
Зачем смотреть предполагаемый план? Смотреть надо на фактический, они ведь могут отличаться.
Можете мне скинуть тот скрипт где создается такая таблица, меняется статистика а главное выполняется тот самый запрос? Или скажите точно где можно скачать этот пример.
Я еще раз повторю, если план запроса тривиальный, тогда естественно ничего перекомпилироваться не будет, в этом нет смысла.

ИМХО если бы при каждом запросе к СУБД MS SQL пересчитывал статистику и перекомпилировал планы выполнения запросов вы бы наслаждались песочными часиками большую часть времени своей работы.


Естественно СУБД не будет пересчитывать статистику при каждом выполнении запроса об этом никто и не говорит. Читайте пожалуйста внимательнее, план будет перекомпилироваться только если по таблице была обновлена статистика. То что перекомпиляция будет только один раз кажется на столько очевидным, что не требует уточнений.
45. comol 4641 20.01.16 15:22 Сейчас в теме
(40) Andreynikus,
план будет перекомпилироваться только если по таблице была обновлена статистика
Почти угадали. Только, к сожалению, не всё так просто....
Но дело в том что статистика сама не всегда обновится тогда когда нужно...

Или скажите точно где можно скачать этот пример
написал же - в (23) 2-я статья. Я тоже не всегда людям доверяю, поэтому всё смотрел и проверял сам, можете тоже проверить и убедиться, тем более полезно будет :).

если план запроса тривиальный, тогда естественно ничего перекомпилироваться не буде
вооо. Вы не пути истинном. А теперь осталось определить что понимается под "тривиальный". В плане может быть только 2 операции, но при этом если он не перекомпилится то вся база "станет ....ом" :)


51. Andreynikus 1204 20.01.16 19:49 Сейчас в теме
(45)
Почти угадали. Только, к сожалению, не всё так просто....
Но дело в том что статистика сама не всегда обновится тогда когда нужно...


Гадают цыганки, я это просто знаю :)
Давайте не будем увиливать от темы, я говорю про перекомпиляцию плана, а не про то что статистика не всегда обновляется когда это необходимо, это все таки разные вещи. Тем более не считаете же вы что люди пишущие документацию MS SQL будут нас дезинформировать?

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

База встанет если люди по вашему совету будут использовать чистку процедурного кэша всего сервера в рабочее время, такого делать ни в коем случае нельзя. Если уж так приспичило чистить процедурный кэш, можно это делать хотя бы для одной базы, а не для всего сервера.
HystriX; Gilev.Vyacheslav; +2 Ответить
53. comol 4641 20.01.16 23:20 Сейчас в теме
(51) Andreynikus,
не считаете же вы что люди пишущие документацию MS SQL будут нас дезинформировать
Нет конечно ни в коем случае, всё чистая правда, как и в документации к 1С :))))).
изменилось только предполагаемое число строк
сущие мелочи в принципе... оно никак на план не влияет, и вообще SQL накой то фиг их считает, тратит лишнее время :)
такого делать ни в коем случае нельзя
конечно конечно... ни в коем случае нельзя... и статистику обновлять нельзя... оно всё само сделает, и вообще руками лучше не лезть - убъёт :). Не очищайте процедурный кэш, попробуйте на рабочем сервере пару дней... и ещё в базе в которой постоянно изменения, таблицы чистятся, запросы новые поялвяются.
Это лучшая рекоммендация в принципе... так к вам больше обращений будет ;). Которые очень легко решаются :)



59. Andreynikus 1204 21.01.16 13:27 Сейчас в теме
(53)
Я вижу вы любите путать теплое с мягким, либо просто сами не понимаете о чем говорите. Дальнейший диалог считаю бессмысленным.

P.S. Ни одна из приведенных ссылок не отвечает полностью на вопрос, почему индекс не используется даже когда он существует, везде только обрывки информации, что только подтверждает сказанное выше.
60. comol 4641 21.01.16 16:17 Сейчас в теме
(59) Andreynikus,
не отвечает полностью на вопрос, почему индекс не используется даже когда он существует
Вы всё ещё верите в существовании полного и всеобъемлющего ответа на этот вопрос? А в Деда Мороза или Санта Клауса тоже? :))))

Дальнейший диалог считаю бессмысленным

+100500
41. Andreynikus 1204 20.01.16 14:29 Сейчас в теме
(39)
Про курсы это к Гилёву он там уже выше что-то предлагал в этом роде :)


Есть такая поговорка: слышу звон да не знаю где он :)

Есть курсы по оптимизации 1С, которые кстати я и веду :)
Но тема индексов там лишь одна из многих тем. Отдельных курсов только про индексы, как вы написали, я не встречал, хотя с удовольствием бы на них сходил.
Gilev.Vyacheslav; +1 Ответить
46. comol 4641 20.01.16 15:25 Сейчас в теме
(41) Andreynikus,
Есть курсы по оптимизации 1С, которые кстати я и веду :)
О_о....
Ну уж тогда вам известно что
разбором ситуаций, когда индекс есть но не может быть использован из-за неоптимально написанного запроса

настолько избитая тема, что про неё ещё не рассказал только ленивый...
52. Andreynikus 1204 20.01.16 19:57 Сейчас в теме
(46)
Не соглашусь с вам, информации в контексте 1С на этот счет крайне мало, да не в контексте 1С тоже не особо то много. Большая часть русскоязычных статей сводится к описанию того что является и что не является SARG аргументом, в лучшем случае еще селективность упомянут. Но ведь в этой теме есть еще много чего интересного.
54. comol 4641 20.01.16 23:48 Сейчас в теме
(52) Andreynikus, Ой ну не смешите. Учимся пользоваться поиском. Только по инфостарту:

http://infostart.ru/public/81694/
http://infostart.ru/public/378766/
http://infostart.ru/public/128175/
http://infostart.ru/public/308762/
http://infostart.ru/public/98628/
http://infostart.ru/public/374023/
http://infostart.ru/public/184361/
http://infostart.ru/public/374023/
http://infostart.ru/public/256292/

Отбалды в принципе, но прочитайте, ознакомьтесь - приобщитесь :)
life-wayfarer; +1 Ответить
43. Sergey.Noskov 1261 20.01.16 14:51 Сейчас в теме
(29) Andreynikus,
1.2. ...когда в запросе есть ключевые слова ВЫБРАТЬ ПЕРВЫЕ тогда скан будет не всей таблицы/индекса, а только первых записей. Частичный скан в плане запроса будет выглядеть как оператор Seek но с условием Where, в графическом плане появится раздел Predicate.

т.е. операция сканирования индекса, если в запросе указано ПЕРВЫЕ, в плане запроса будет отображаться как операция Seek (поиск)?

44. Andreynikus 1204 20.01.16 15:10 Сейчас в теме
(43) Sergey.Noskov,
Это 2 разных предложения про две разные вещи.
Если указано ВЫБРАТЬ ПЕРВЫЕ тогда будет операция Scan но это не означает что будет скан всей таблицы/индекса, будет просто чтение нескольких первых записей.

Частичный скан это другая история никак не связанная с ВЫБРАТЬ ПЕРВЫЕ. Частичный скан - это когда часть данных ищется по индексу, а часть сканируется.
89. Painted 41 10.02.17 16:11 Сейчас в теме
(29)
У регистра расчета нет кластерного индекса

В таком случае, логично создать его вручную. Чем это может быть чревато? Ну, кроме нарушения соглашения 1С, конечно.
90. starik-2005 2642 11.02.17 21:02 Сейчас в теме
(89) "Кластерный индекс" - это абстракция, описывающая положение элементов таблицы при вставке. Создание кластерного индекса для таблицы расчетов по всей видимости бессмысленная затея. Как таковой "кластерный индекс" нигде не хранится - хранится только его описание.
91. Painted 41 12.02.17 12:29 Сейчас в теме
(90) "Кластерный индекс" - это физическое сортировка записей регистра. Поэтому работа с ним быстрее, чем с некластерным индексом. Я так это понял.
Если у регистра есть индексы, почему бы не выяснить, какой индекс используется чаще и отсортировать таблицу в соответствии с этим индексом, то есть сделать его "кластерным"?
30. Mortiferus 355 20.01.16 08:31 Сейчас в теме
я вроде человек с высшим образованием (физик), а ничегошеньки не понял и, главное, ничего полезного не почерпнул. А где же конкретные примеры, как надо и как не надо использовать эти самые индексы? Может я такой "тугой", а все остальные такие "вумные", но для меня статья - "полный ноль". Даже те небольшие бесплатные видеоуроки с курсов 1С дали на порядок больше информации. Простите уж...
SkyHunter; +1 Ответить
31. fzt 20.01.16 09:21 Сейчас в теме
(30) Mortiferus, окай. Вот тебе одна из полезняшек:
Данные любой таблицы в MsSQL будут кластеризованы (грубо говоря идти в том-же порядке на жестком диске) по одному из индексов. Зная какой это индекс, можно заставить летать то, что летать не может. можно переработать запросы, существенно сократив время их выполнения. Как-раз для случая, когда вернется 50% таблицы, логично данные таблицы сложить по порядку на диске, в котором ожидается их чтение. Таким образом чтение станет последовательным как для данных, так и для индекса. Физика HDD?

Разумеется при использовании SSD положением данных на диске можно пренебречь. Но не другими благами кластеризации. Вообще жаль что вам не интересно. Проблема в том, что разработчики и доработчики конфигураций активно и бездумно добавляют индексы реквизитам объектов. Статья о них и скорее для них.
55. Irwin 383 21.01.16 12:12 Сейчас в теме
(31) fzt, немного не так. То, что записи в таблице отсортированы, не значит, что они так и хранятся.
Физически записи в кластерном индексе отсортированы только в пределах страницы. Сами страницы отсортированы логически – горизонтальными ссылками между страницами, но располагаться на диске могут как угодно. Поэтому никакого последовательного чтения не будет.
56. dmpas 21.01.16 12:17 Сейчас в теме
(55) Irwin,
отсортированы только в пределах страницы

более того, даже сами записи не отсортированы, а лишь хранится отдельно в конце страницы список с необходимым порядком записей.
66. fzt 22.01.16 08:08 Сейчас в теме
(56)(57)(58) все это действительно нужно вываливать на неофита?
57. AlX0id 21.01.16 12:50 Сейчас в теме
(55) Irwin,
Тем не менее, операция дефрагментации индексов будет пытаться их привести к такому порядку. Так что иногда все-таки может быть и последовательное чтение %)

(56) baton_pk,
А это с точки зрения головки HDD должно быть пофиг - читается всегда страница целиком.
58. dmpas 21.01.16 13:23 Сейчас в теме
(57) AlX0id,
с точки зрения головки HDD должно быть пофиг

Это да, я просто внёс теоретическое уточнение :)
34. comol 4641 20.01.16 11:17 Сейчас в теме
(30) Mortiferus,
а ничегошеньки не понял
Я старался, и у меня не получилось видимо :(. Почитайте Дейта попробуйте http://www.ozon.ru/context/detail/id/2309312/ потом вернитесь к статье.
ничего полезного не почерпнул
Ну последнюю часть прочитайте.
42. dmpas 20.01.16 14:49 Сейчас в теме
Кажется, мы теряем правильное направление.

Раз сюда начали слетаться гуру, может, кто-нибудь подробнее расскажет нам про статистику?

Про то, что статистика строится по одному столбцу; про то, когда и как создаётся автоматическая статистика, про 200 шагов (почему их 200?); про автоматическое обновление статистики, автоматическое асинхронное обновление статистики - про это вообще некоторые такую бредятину несут иногда.
47. comol 4641 20.01.16 15:27 Сейчас в теме
(42) baton_pk, (23) SQLCMD 2-я статья... но там уже явно "не для всех"...
48. dmpas 20.01.16 15:43 Сейчас в теме
(47) так я и хотел бы увидеть объяснение "для всех", как в этой статье про индексы.
А не ссылку на статью, где лично я для себя нового ничего не открыл при беглом просмотре.
Gilev.Vyacheslav; +1 Ответить
49. comol 4641 20.01.16 16:49 Сейчас в теме
(48) baton_pk,
где лично я для себя нового ничего не открыл при беглом просмотре
О_о... Я раза 4 читал и каждый раз открывал что-то новое... ну наверное ты просто глубоко очень разбираешься в деталях работы оптимизатора MS SQL... Про статистику конечно ещё есть что написать... Но тут наверное "простой 1С-ник" вряд ли на что-то сможет повлиять. Подумаю вообщем...
50. dmpas 20.01.16 18:01 Сейчас в теме
(49)
наверное ты просто глубоко очень разбираешься

ну если только как-то так
62. Gilev.Vyacheslav 1888 21.01.16 21:04 Сейчас в теме
касаемо статьи в целом - почему не надо создавать индекс на каждый столбец и без этой статьи понятно - разумеется, индексы отлично себя показывают, пока вы выполняете запросы на выборку данных оператором SELECT, но как только начинается частый вызов операторов INSERT, UPDATE и DELETE, так пейзаж очень быстро меняется
но даже тут не все однозначно:
приоритеты задач тоже имеют значение - если мне нужно загрузить массив данных быстро в ущерб коллективной работе - я могу удалить хоть все индексы, если мне важнее коллективная параллельная работа, я наоборот пожертвую скоростью одного потока в пользу параллельности...
starik-2005; comol; +2 Ответить
64. comol 4641 21.01.16 22:58 Сейчас в теме
(62) Gilev.Vyacheslav,
и без этой статьи понятно
но даже тут не все однозначно
Поэтому продолжаю верить что лишний раз обратить внимание на эти проблемы необходимо :)
65. fzt 22.01.16 07:47 Сейчас в теме
71. Dach 346 03.02.16 12:04 Сейчас в теме
Прочитал. И комментарии тоже. Остались вопросы.

Давайте на конкретных примерах, прямо, чтобы вообще всем было понятно.

Например, самая распространенная ситуация сейчас: платформа 8.3, MS SQL, режим работы ReadCommitedSnapshot. Конфигурация на УФ, работа в тонком клиенте, управляемые блокировки. Сервер СУБД нормально настроен: статистика, шринк, реиндекс и все остальное. Если контора "побохаче", то для tempdb куплен промышленный ssd.

1. Есть большой регистр накопления, 5-7 измерений к примеру, несколько ресурсов, несколько реквизитов. Все измерения ссылочные. В регистр осуществляется частая параллельная запись по не пересекающимся (в абсолютном большинстве случаев) наборам данных, также часто идет чтение с помощью отчетов и контроля остатков при проведении документов. Чтение возможно с отборами как по всем измерениям, так и по некоторым. В основном читаются итоги регистра, но в отдельных тяжелых отчетах, которые формируются не чаще нескольких раз в месяц - читается и физическая таблица, также с отборами по ну например 4 измерениям. Скорость записи в регистр является более приоритетна, чем чтение. Объем новых данных ежедневно - 5-7 тыс строк.

Как настроим индексы? Мне интересно, как будем рассуждать.

2. То же самое, что п. 1, только абсолютное большинство наборов записываемых данных могут пересекаться по отдельным измерениям. Как рассуждаем в этой ситуации?

3. То же самое, что в п. 1, только теперь чтение приоритетнее записи, запись к примеру делается фоновым режимом, в ночное время. Чтение же должно выполняться быстро. Часто читается физическая таблица регистра.

4. Регистр сведений, непериодический. Несколько измерений (2-3), один ресурс. Частая запись и частое чтение. Объем новых данных ежедневно - 100-200 строк. Чтение приоритетнее записи. На период чтения пересекающихся наборов данных из одного потока, все остальные потоки должны курить в сторонке. На запись тоже самое.

5. То же самое, что п. 4, только никто курить не должен, все читают и не мешают друг другу. На запись также.

Может несколько сумбурно, но просьба прокомментировать ход мыслей
72. starik-2005 2642 07.02.16 13:47 Сейчас в теме
(71) Dach, да, все любят рассуждать про индексы, кто-то даже любит рассуждать про оптимизацию. Но никто особо не касается проблемы проектирования на примерах из математики вычислений, которые делает программа СУБД, чтобы возвратить результат. А это и есть самый важный момент.

Собственно, программа СУБД пытается оптимизировать запрос с целью совершить минимальное количество чтений из файла данных. ОТ этого и надо отталкиваться. Если у поля есть индекс, то поиск первой записи, удовлетворяющей условиям отбора по данной колонке, происходит в среднем за log2(N)/2 чтений индекса, если индекс представляет из B-TREE (двоичное дерево) и его подвиды (+/*). Это как найти нужную страницу в книге, перелистывая ее вперед/назад, или как угадывание возраста по больше/меньше. Также существуют индексы на основе хеш-функций, но с ними отдельный момент:
[quote]Важное свойство хеш-таблиц состоит в том, что, при некоторых разумных допущениях, все три операции (поиск, вставка, удаление элементов) в среднем выполняются за время O(1). Но при этом не гарантируется, что время выполнения отдельной операции мало́. Это связано с тем, что при достижении некоторого значения коэффициента заполнения необходимо осуществлять перестройку индекса хеш-таблицы: увеличить значение размера массива H и заново добавить в пустую хеш-таблицу все пары.[/quote] - wiki.

Помимо этого, также нужно понимать, что индексы помогают очень быстро найти нужный элемент, но при этом влияют на время вставки (если это не достигший "вырождения" хеш-индекс). Всех больше влияет на это кластерный индекс, ибо по нему сортируются элементы в файле базы данных (разумеется там закладывается резерв и элементы часто вставляются с пропусками для будущих инсёртов). Отсюда простая мораль: если у вас есть регистр с контрагентом, соглашением и суммой, то при в среднем одном договоре у одного контрагента особого смысла в индексе по договору нет, если Вы в запросах не будете присоединять эту таблицу именно по договору без контрагента. Но т.к. 1С все-равно построит индекс по всем измерениям, то повлиять на это без удаления индекса средствами не 1С Вы особо не сможете.

Таким образом могу сказать, что все должно идти из архитектуры решения целиком. Грохаете индекс по договору - соединяйтесь по контрагенту и договору всегда вместе. Нужны данные только по договору - делайте индекс на договоры. Отбираете по четырем полям - проиндексируйте одно основное, остальные найдутся рядом. Если скорость отбора приоритетна перед записью и уникальность данных всех полей достаточно высокая - проиндексируйте все. Но если для двух первых полей третье и четвертое - это два-три варианта, то смысла добавлять их в индекс особого нет.
73. Gilev.Vyacheslav 1888 08.02.16 11:59 Сейчас в теме
(72) starik-2005, мы пошли другим путем - оцениваем эффективность созданного индекса http://www.gilev.ru/sqlsize/
74. Dach 346 08.02.16 15:05 Сейчас в теме
(73) Вячеслав, а среди Ваших сервисов есть нагрузочное тестирование - массовая параллельная запись в таблицы и чтение из них же?

До сих пор я сам пишу себе такие тесты. Есть мысль сделать универсальную обработку, но может уже есть что-то подобное?
76. Gilev.Vyacheslav 1888 11.02.16 10:59 Сейчас в теме
(74) Dach, да, 2й шаг теста tpc (G1C) тест на массовую запись
75. _Z1 38 08.02.16 21:23 Сейчас в теме
(72) Почему только вставка меняет индекс.
Индекс меняется (точнее может ) меняться и при изменении записей
и точно меняется при удалении записей.




Если скорость отбора приоритетна перед записью и уникальность данных всех полей достаточно высокая - проиндексируйте все.

Вот это точно неправильный совет для любой таблицы - потому что это не всегда поможет
и потому что увеличивается время на построение плана запроса.
77. starik-2005 2642 11.02.16 21:47 Сейчас в теме
(75) _Z1, он строится не каждый раз, потом хранится в процедурном кеше.
78. _Z1 38 12.02.16 13:38 Сейчас в теме
(77) Как часто будет компилироваться план запроса Вы можете только предполагать
но никак не влиять на это ( исключение из этого можно задать опцию всегда перекомпилировать план )

В любом случая Ваш совет на каждое поле таблицы создавать свой индекс - неправильный.
79. starik-2005 2642 12.02.16 17:51 Сейчас в теме
(78) _Z1, это был не совет, а один из вариантов. Внимательно прочитайте написанное мной.
80. Yashazz 4268 25.02.16 17:41 Сейчас в теме
Перечитал публикацию ещё раз, внимательно. Ничего нового. В значительной степени это компиляция давно известных статей (например, с sql.ru) и упомянутых мной методических материалов. Единственная польза - инициирован довольно профессиональный срач, в комментах накиданы полезные сведения. А в самой статье всё "по верхам" и много неточностей.
81. comol 4641 29.02.16 13:05 Сейчас в теме
(80) Yashazz,
это компиляция давно известных статей (например, с sql.ru)
Ну ладно теперь уже хоть не с книжки Филиппова плагиат у меня :)))) Ещё пару раз перечитаешь и глядишь поймёшь что первоисточники более фундаментальны :).

Ничего нового

На научные изыскания в области баз данных или разработку новых решений СУБД я не претендую :)))

всё "по верхам" и много неточностей

Не думаю что дальше "вглубь" имеет смысл..Если мне на собеседовании хотя бы каждый второй разработчик 1С без запинки расскажет чем отличается кластерный индекс от некластерного то можно будет копать и глубже.
Что касается неточностей - я не думаю что косяк с регистрами рассчета настолько принципиален...
82. Yashazz 4268 29.02.16 13:32 Сейчас в теме
(81) ну вредничаю я. Мне примерно полгода назад долго объясняли старшие товарищи, что писать такие статьи на ИС значит жёстко баянить, я и не стал... А теперь вредничаю)
83. comol 4641 29.02.16 14:30 Сейчас в теме
(82) Yashazz, я тоже иногда так делаю тссс ;)
92. nvv1970 30.10.17 23:54 Сейчас в теме
(82) ну вот старшие товарищи не правы. И вы тоже, потому что послушались их.
Младшим товарищам нужно черпать знания. И чем больше источников будет - тем лучше! Пусть это будут перепосты, баяны. Пусть. Но информация будет доступна. Если гуру постесняется поделиться правильной информацией, то информационная пустота быстро заполнится псевдоэкспертами.
Пусть будет больше источников! А уж отличать правильную информацию от бреда мы научимся.
ПС: не курсами одними нам учиться)))))
84. starik-2005 2642 29.02.16 17:37 Сейчас в теме
(81) что, обычные 1С-ники действительно этого не знают? Чъорд! Но я у Вам на собеседование не пойду. Чувствую, скоро меня собеседовать заставят.
85. qwinter 643 03.03.16 09:30 Сейчас в теме
(84) starik-2005, обычный 1С-ник = бывший консультант = бывший продавец))) Откуда им это знать?
86. HAMMER_59 228 27.09.16 08:43 Сейчас в теме
"Как вы будете его угадывать? Перебором: "Это 1? Это 2? Это 3?". Скорее всего, вы будете задавать вопросы вида: "Оно больше 25?". И только когда вариантов останется около 2-3, вы будете перебирать возможные. "
У такого метода есть название - метод дихотомии.

Прочитал пока бегло, возможно, не заметил. Нет описания как строятся деревья, в частности при относительно быстром алгоритме скорее всего будет получатся несбалансированное дерево. Именно для этого, в частности, и нужна реиндексация.


87. Danil.Potapov 497 02.02.17 23:54 Сейчас в теме
"Все, что Вы всегда хотели знать об индексах, но боялись спросить"
ссылки выше ведут на видео минимального качества, на youtube его выложили в отличном качестве
часть 1
https://www.youtube.com/watch?v=cW-2D2YiBjY
часть 2
https://www.youtube.com/watch?v=L1nweCOFZdk
часть 3
https://www.youtube.com/watch?v=Hcjqp2RHZRc
life-wayfarer; Fragster; +2 Ответить
88. Danil.Potapov 497 02.02.17 23:55 Сейчас в теме
на самом канале много SQL классики, вчера даже Вячеслава Гилева выложили в 720p.
https://www.youtube.com/channel/UCE0_rcbKAtw51y0b6K6tgGg/videos
Fragster; +1 Ответить
93. kuzyara 1249 01.12.17 07:49 Сейчас в теме
Чтобы всё было в одной теме, прикрепил документацию по индексам в 1С.
Прикрепленные файлы:
its_1c_ru_db_content_metod8dev_src_admins_i8101590_htm___151.pdf
94. uncle_Vasya 21.01.20 14:45 Сейчас в теме
Когда вы ставите у какого либо реквизита, ресурса или измерения объекта 1С признак "индексировать" - создаётся дополнительный или обновляется существующий не кластерный индекс для этой таблицы.

Если просто "индексировать" - то индекс обычный.
Вот если "индексировать с доп.упорядочиванием" - тогда будет кластерный.
Оставьте свое сообщение

См. также

Использование классов .Net в 1С для новичков Промо

Механизмы платформы 1С v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    88334    Serginio    116    

Динамическое обновление - это зло?

Механизмы платформы 1С v8 1cv8.cf Бесплатно (free)

Копнем глубже в тему "Что же такое динамическое обновление" и почему оно может привести к проблемам. И может ли?

09.05.2022    7404    YPermitin    64    

Об одной неочевидной проблеме перехода на версию платформы 8.3.20

Механизмы платформы 1С v8 Бесплатно (free)

При переходе на платформу 8.3.20 мы столкнулись с ошибкой "Повторяющийся псевдоним "Ссылка" Ссылка AS Ссылка,Presentation AS Presentation,Ссылка AS Ссылка" в ряде типовых конфигураций. Причём, эта проблема оказались неизвестна ни Яндексу, ни Гуглу. Путём мучительных экспериментов нам удалось найти решение. Пока я ещё не уверен, действительно это решение или обходной костыль, а настоящая проблема -- в чём-то другом, но это решение работает в ситуации, когда всё сломалось, а проблему надо решать срочно. Предположительная причина: платформа 8.3.20 более строго относится к типизации данных в запросах, чем предыдущие версии, вываливая в случае несоблюдения новшеств малопонятные ошибки.

08.04.2022    3577    Kernelbug    22    

Отборы динамического списка

Механизмы платформы 1С v8 Бесплатно (free)

Динамический список предоставляет несколько объектов "Отбор". В статье разбирается, какой для чего нужен и как их использовать на форме. Рассматриваются только возможности платформы (без БСП).

28.03.2022    3483    Gladkov_Anton    3    

Использование программных перечислений, ч.1: строковые константы Промо

Механизмы платформы 1С v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    41809    unichkin    74    

Фишки платформы 1С 8.3 для начинающего разработчика

Механизмы платформы 1С v8 1cv8.cf Россия Бесплатно (free)

В данной заметке рассмотрены вспомогательные инструменты платформы, которыми часто пренебрегают начинающие программисты 1С.

11.03.2022    7484    Dimbayyyy    96    

Экспертный кейс. Расследование деградации производительности системы. Проведение документа “Поступление товаров и услуг” (1С:ERP 2)

Механизмы платформы 1С Запросы HighLoad оптимизация v8 ERP2 Бесплатно (free)

В ходе проведения нагрузочного тестирования одним из наших клиентов была выявлена сильная деградация производительности системы в целом и, в частности, выполнения ключевой операции “Проведение документа поступление товаров и услуг” в течение выполнения теста. Согласно данным подсистемы БСП “Оценка производительности”, время выполнения ключевой операции “Проведение документа поступление товаров и услуг” возрастало в процессе тестирования с 15-20 секунд в начале тестирования до 150-200 секунд в его финале.

02.03.2022    2814    it-expertise    47    

Модульная архитектура или пара слов о расширениях. Часть I (мысли, рассуждения)

Механизмы платформы 1С v8 Бесплатно (free)

Статья-размышление о том, какое может быть применение технологии расширений 1С и зачем нам, разработчикам/программистам на 1С, знать общепринятые паттерны проектирования приложений. Итак, а что если я вам скажу, что технология расширений 1С - это одно из прекрасных новшеств компании 1С? Пусть эта статья будет хвалебной одой расширениям 1С.

14.02.2022    4466    amon_ra    67    

Вспомогательные инструкции в коде 1С Промо

Механизмы платформы 1С v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    37858    tormozit    107    

Синхронный и асинхронный вызов в новых версиях платформы

Механизмы платформы 1С v8 1cv8.cf Бесплатно (free)

Начиная с платформы 8.3.18.1128 переработана технология работы с асинхронными вызовами. В данной статье хочу описать новые асинхронные вызовы и сравнить их с предыдущими на примере функции - Вопрос на клиенте.

31.01.2022    3099    Shining_ninja    15    

Несколько простых приемов для удобной работы в конфигураторе

Универсальные функции Механизмы платформы 1С v8 Бесплатно (free)

Простая и удобная среда разработки 1С:Предприятия позволяет практически любому человеку начать работать под капотом 1С - в конфигураторе. Время идет, новички становятся программистами, специалистами, а об удобных приемах работы узнают годами, по ходу своего карьерного пути. А здорово было бы, если бы все знали удобные приемы в начале своего пути? Эти несколько приемов будут полезны новичкам, так как они затрагивают ту область работы, с которой приходится сталкиваться в начале карьеры.

12.11.2021    8004    acces969    95    

Как спроектировать структуру регистра сведений

Механизмы платформы 1С v8 v8::Запросы Бесплатно (free)

«Что может быть проще?» — это первое, что приходит в голову. Но что, если это не так? В этой статье мы попробуем затронуть некоторые вопросы, которые могут возникнуть при проектировании больших регистров.

08.11.2021    6387    Neti    60    

Как прикрутить ГУИД к регистру сведений Промо

Механизмы платформы 1С v8 Бесплатно (free)

... и немного теории обмена данными. В частности, разберем боль всех, кто пишет небанальные обмены данными: как набору записей регистра сведений назначить гуид и далее использовать его в обмене для идентификации этого набора.

16.04.2019    23987    m-rv    18    

О вложенных попытках, исключениях и о представлении ошибок

Механизмы платформы 1С v8 1cv8.cf Бесплатно (free)

В данной статье, на небольшом примере, мне бы хотелось показать, как себя ведут вложенные "Попытка-Исключение". А также о том, чем отличаются методы ОписаниеОшибки() и ИнформацияОбОшибке().

07.11.2021    3821    Nicholas    17    

Обработчик ожидания. Нюансы

Механизмы платформы 1С v8 Бесплатно (free)

ПодключитьОбработчикОжидания: некоторые подробности и особенности работы

24.08.2021    11711    Yashazz    25    

Прогресс-бар в поле динамического списка

Механизмы платформы 1С v8 Бесплатно (free)

Изображаем прогресс-бары в колонке динамического списка

23.08.2021    3365    Yashazz    13    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

Механизмы платформы 1С v8 1cv8.cf Бесплатно (free)

Вариант решения задач с проведением по типовым регистрам нетиповыми регистраторами. Зачем - чтобы при сравнении конфигурации не обращать внимание на свойства регистров и исключить вероятность допущения горькой оплошности при обновлении информационных баз, заменив типы регистраторов основной конфигурации типами конфигурации поставщика. Для программных продуктов, имеющих в своем составе метаданных документ "Корректировка регистров"("Корректировка записей регистров").

05.12.2017    31296    itriot11    34    

ПриПолученииДанныхНаСервере + Контекст формы. Лайфхак

Механизмы платформы 1С v8 Бесплатно (free)

Передать свои произвольные данные в событие, которое "без контекста"? Легко!

13.08.2021    4426    Yashazz    16    

Новичок новичку: как добавить программно кнопку на форму путем расширения

Механизмы платформы 1С v8 Россия Бесплатно (free)

Рассказываю очень простым языком, как добавить программно кнопку в типовую конфигурацию. Сам новичок в этом деле и рассказываю на "новичковом" языке.

13.05.2021    18005    user1312100    23    

Программное создание расширения

Механизмы платформы 1С v8 Бесплатно (free)

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

06.04.2021    5240    Yashazz    14    

Ускоряем 1С: модули с повторным использованием возвращаемых значений Промо

Механизмы платформы 1С v8 Бесплатно (free)

По роду своей деятельности, мне часто приходится обсуждать с программистами детали реализации той или иной функциональности. Очень часто, разговаривая даже с квалифицированными специалистами я сталкиваюсь с незнанием сути платформенной функциональности Повторного использования возвращаемых значений общих модулей. В данной статье я постараюсь дать краткий обзор и основные особенности этой функциональности.

04.09.2017    60553    m-rv    63    

Неочевидные нюансы записи управляемой формы

Механизмы платформы 1С v8 v8::УФ Платформа 1C v8.2 1cv8.cf Бесплатно (free)

Разберем несколько нюансов записи управляемой формы.

02.04.2021    18038    SeiOkami    56    

Советы из Желтой тетради 📒 #1

Механизмы платформы 1С v8 Бесплатно (free)

В этой публикации я собрал в одном месте часть советов и лайфхаков, которые открыл для себя в последнее время. Регулярно я публикую их в своём телеграм-блоге "Жёлтая тетрадь 📒 Блог программиста 1С", здесь же - дайджест этих публикаций.

15.03.2021    5388    builin    120    

Флаг "Использовать ПОЧТИ всегда", или Нюанс динамических списков

Механизмы платформы 1С v8 Платформа 1C v8.2 1cv8.cf Бесплатно (free)

Небольшая пятничная история по программной работе со строкой динамического списка.

11.02.2021    7106    SeiOkami    36    

Регулярные выражения без внешних компонент? Легко! Промо

Механизмы платформы 1С v8 Бесплатно (free)

Сложный способ организовать проверку строки с помощью регулярного выражения в 1С. При этом ни одна внешняя компонента не пострадала. Ну и от платформы (Linux, MustDie) - не зависит.

04.03.2016    74329    starik-2005    109    

Расширенный автоподбор при вводе по строке в поле ввода в управляемых формах

Механизмы платформы 1С v8 v8::УФ 1cv8.cf Бесплатно (free)

Началось все с того, что штатный автоподбор при вводе по строке в поле ввода для некоторых больших справочников устраивать перестал. Вообще, для способа поиска строки "Любая часть" он работает на первый взгляд очень хорошо: работает как полнотекстовый (т.е. по нескольким словам) даже без активации полнотекстового поиска, красиво подсвечивает слова поиска в результатах. Казалось бы, все отлично. Но есть неприятное ограничение - всего лишь 10 значений в результирующем списке (у вас может быть несколько больше, так как платформа неявно добавляет результаты поиска по истории ввода). Для небольших справочников или справочников с разнородным ассортиментом все хорошо. Но не в моей ситуации. А простых путей увеличить количество выдаваемых строк на момент написания статьи мне обнаружить не удалось. Пришлось полностью переопределять автоподбор. Ниже речь пойдет именно об этом. И, к слову, в типовых конфигурациях для некоторых справочников используются похожие приемы для увеличения количества строк результата автоподбора.

21.01.2021    5447    herfis    7    

О формах 1С замолвите слово... Необычное использование знакомого всем объекта

Механизмы платформы 1С v8 Бесплатно (free)

Неочевидно, но форму 1С можно использовать как универсальный объект, который доступен на клиенте и имеет уникальный набор свойств, методов, событий и конструктор, принимающий параметры. При этом у формы может не быть интерфейса, и ее можно даже не открывать. О реальных примерах применения такого подхода пойдет рассказ.

13.01.2021    8762    CyberCerber    46    

Наследование свойств элементов, или Как пользователь может сломать вашу форму

Механизмы платформы 1С v8 Платформа 1C v8.2 1cv8.cf Бесплатно (free)

В 1С можно установить свойства ТолькоПросмотр, Доступность и Видимость не только на элементы формы, но и на группы элементов. Но стоит ли так делать? Оказывается, пользователь может обойти запреты, которые установлены на папку. Об этом подробнее в видео.

12.01.2021    4756    SeiOkami    25    

Методика переопределения и вызова обработчиков событий обычной формы Промо

Механизмы платформы 1С v8 1cv8.cf Россия Бесплатно (free)

Каждый из нас хотя бы раз задумывался над тем, как было бы удобно, если бы мы могли переопределять обработчики событий формы, сохраняя возможность вызова старого обработчика независимо от его имени. В этой статье изложен метод, который позволяет реализовать эту возможность.

24.06.2007    90187    tormozit    31    

Ускоряем медленный/долгий и тормозной стандартный поиск по динамическому списку, настраиваем его под себя

Механизмы платформы 1С v8 v8::УФ 1cv8.cf Бесплатно (free)

Пользователи привыкли искать на форме списка, но, вбивая в поиск некорректные данные, могут завесить всю систему, а если еще искать нужно по НЕ полям списка, то решение только в своём поиске - все это решим в публикации с открытым кодом.

14.12.2020    30061    SizovE    2    

Передача параметров по значению в языке 1С

Механизмы платформы 1С v8 ИТ-компания Бесплатно (free)

Все мы знаем, что в 1С можно написать такое: Процедура ОбработатьОбъект(Знач Объект) КонецПроцедуры Т.е. тем самым мы передаем в процедуру параметр по значению Далее в статье будут рассмотрены некоторые особенности передачи по значению объектов НЕпримитивных типов.

26.11.2020    4026    direktorSan    9    

Установка отбора для поля ввода управляемой формы через ПараметрыВыбора (без переопределения событий "НачалоВыбора", "Автоподбор")

Механизмы платформы 1С v8 v8::УФ Бесплатно (free)

Зачастую возникает необходимость ограничить вывод элементов какого-нибудь справочника или перечисления при редактировании поля ввода (отфильтровать доступные для выбора элементы) эта публикация показывает простой и эффективный способ реализации этого.

15.11.2020    9422    Eugen-S    11    

Отладка подключаемых обработок Промо

Механизмы платформы 1С v8 1cv8.cf Бесплатно (free)

На самом деле для этого не нужно ни изменять конфигурацию, ни пользоваться вспомогательной обработкой-отладчиком.. Все просто :)

04.01.2017    80813    unichkin    118    

Групповое изменение реквизитов объектов расширений

Механизмы платформы 1С v8 ERP2 УТ11 КА2 Бесплатно (free)

Доработка встроенной обработки "Групповое изменение реквизитов" для возможности изменения ссылочных реквизитов с ссылками на объекты расширения. Работает в Комплексной конфигурации 2.4.

07.11.2020    2186    Alfn    14    

Лайфхаки для разработчиков 1С. Часть 1

Универсальные функции Механизмы платформы 1С v8 Россия Бесплатно (free)

Собрали 20 лайфхаков, которые используют наши программисты при работе с 1С. Формы, контрагенты, СКД, процедуры, глюки платформы и многое другое. В этой статье публикуем первую часть.

30.09.2020    7776    Neti    47    

Контекст любого объекта конструкцией #Если Фамилия Тогда

Механизмы платформы 1С v8 1cv8.cf Бесплатно (free)

Делаем инициализацию переменной в "своей" инструкции препроцессора, для получения контекстной подсказки объекта через точку. В дальнейшем в компилированном коде сама инициализация игнорируется, т.к. "своя" инструкция препроцессора НИКОГДА не выполняется.

17.08.2020    2721    sapervodichka    36    

Программные перечисления, ч.2: приемы кэширования при разработке Промо

Универсальные функции Механизмы платформы 1С Запросы v8 Бесплатно (free)

Все знают, что такое кэш, и зачем он нужен. Но в 1С разработчик обычно использует кэширование только на уровне конфигурации, а в какой-нибудь обработке скорее ломает голову над запросом - как получить все данные за один заход... Хочется рассказать о том, как можно добиться хороших результатов с стратегией "разделяй и властвуй".

30.10.2017    28497    unichkin    18    

Новое отображение ошибок в 1С

Механизмы платформы 1С v8 1cv8.cf Бесплатно (free)

Рассмотрим развитие механизма отображения ошибок в 1С (начиная с 8.3.17)

10.08.2020    25270    SeiOkami    44    

Динамический список, ключи записей. Нюансы

Механизмы платформы 1С v8 Бесплатно (free)

Заметки об особенностях динамических списков с произвольным запросом и видом ключа, отличным от "Авто"

07.08.2020    7446    Yashazz    6    

Вы запускаете приложения, но делаете это без уважения

Механизмы платформы 1С v8 1cv8.cf Бесплатно (free)

О запуске сторонних приложений и скриптов из кода встроенного языка платформы 1С.

21.07.2020    11418    YPermitin    32    

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

Механизмы платформы 1С v8 1cv8.cf Бесплатно (free)

Рассмотрены возможности произвольного использования стандартных функций, вызываемых из меню платформы "Все функции" - "Стандартные" (Активные пользователи, Журнал регистрации, Поиск ссылок на объект, Проведение документов ...).

19.06.2015    124120    ekaruk    138    

Использование Стека вызовов в качестве условия оператора Если [...] Тогда

Механизмы платформы 1С v8 1cv8.cf Бесплатно (free)

Делюсь интересным приёмом, позволяющим использовать данные стека исполнения кода 1С в качестве условия, накладываемого на выполнение кода.

12.07.2020    10046    sapervodichka    62    

Серверные вызовы, которые нельзя вызывать

Механизмы платформы 1С v8 v8::УФ 1cv8.cf Бесплатно (free)

Не баян, а классика. Рассмотрим особенность платформы настолько же древнюю, как сами УФ.

12.05.2020    10931    SeiOkami    34    

Как обойти глюк механизма расширений. Пошаговая инструкция в картинках

Механизмы платформы 1С v8 БП3.0 Бесплатно (free)

После очередного обновления Бухгалтерии 3.0 в одной очень известной фирме мне звонит наш программист 1С, который ведет эту фирму, со словами - Шеф. Все пропало. Нам конец. Наше расширение грохнулось.

26.04.2020    13822    alfanika    21    

Простая и быстрая эмуляция операций с битовыми строками Промо

Механизмы платформы 1С v8 Бесплатно (free)

Битовые строки могли бы упростить реализацию некоторых алгоритмов на языке платформы «1С: Предприятие 8». Но пока в платформе операций с битовыми строками нет. В то же время уже сделанные попытки смоделировать эти операции преобразованиями над числами опираются на циклы обработки отдельных битов, что плохо сказывается на скорости их работы. Предлагается новое простое решение, основанное на представлении битовых строк строками символов «0» и «1». Приводится примеры кода выполнения основных логических операций AND, OR, XOR, NO без использования циклов. В качестве прикладной задачи рассмотрено получение последовательных значений кода Грэя, который можно использовать для ускорения перебора вариантов.

22.06.2016    30634    ildarovich    14    

Выгрузка новых стандартных обработок

Механизмы платформы 1С v8 Россия Бесплатно (free)

Описывается способ определить адрес ресурса, по которому стандартная обработка хранится в платформе 8.3, с последующим сохранением обработки в файл внешней обработки.

24.04.2020    2872    anddro    5    

Совместимость работы со строками. Жизнь до 8.3.6 и после

Механизмы платформы 1С v8 Бесплатно (free)

Немного о совместимости со старыми версиям платформы 1С в работе со строками.

21.02.2020    6506    YPermitin    24    

Эволюция расширения конфигурации

Механизмы платформы 1С v8 1cv8.cf Бесплатно (free)

С каждым днем всё больше возможностей появляется в расширении конфигурации, но не все до сих пор работают даже на платформе 8.3.6! Давайте окунемся в историю появления и эволюции расширения конфигурации, чтобы знать и понимать, когда можно применить тот или иной функционал!

06.02.2020    18170    Xershi    47    

Расширения конфигурации. Полезные советы для разработки Промо

Механизмы платформы 1С v8 Бесплатно (free)

Полезные советы для разработки и применения расширений. Как подключить отладку, как сохранять данные, последовательность обработчиков, использование модуля менеджера и другое.

12.01.2016    352700    mrXoxot    209    

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

Механизмы платформы 1С v8 Россия Бесплатно (free)

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    43000    kuzyara    38    

Анализ функциональности: где наш код?!

Механизмы платформы 1С v8 1cv8.cf Бесплатно (free)

Как я анализирую места выполнения кода и собираю статистику. Материал скорее для новичков. Но и для тех, кто хочет быстро постигать функциональность.

02.12.2019    4610    Kindman1980    12    

30 задач. Странных и не очень

Математика и алгоритмы Механизмы платформы 1С v8 Бесплатно (free)

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    28954    YPermitin    63    

Самые распространенные заблуждения об индексах в мире 1С

Инструменты администратора БД Администрирование СУБД Бесплатно (free)

"Магия" индексов привела к множеству заблуждений об их работе. Попробуем развеять некоторые из них в контексте 1С.

28.11.2019    36730    YPermitin    53