Зачем разработчику 1с «индексировать» измерения регистров и реквизиты ?

Зачем разработчику 1с «индексировать» измерения регистров и реквизиты ?

— Ну у вас и запросы! — сообщила база данных и повисла…

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

Что такое индекс?

Подобно содержанию в книге, индекс  в базе данных разрешает скоро искать конкретные сведения в таблице.

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

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

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

Не смотря на то, что индекс и связан с конкретным столбцом (либо столбцами) таблицы, все же он есть независимым объектом базы данных.

Легко объекта «Индекс» в платформе 1С:Предприятие 8 нет.

Индексы таблиц в базе данных 1С:Предприятие создаются неявным образом при создании объектов конфигурации, и при тех либо иных настройках объектов конфигурации.

  • Неявным образом индексы создаются с учетом типов полей ключа данных  — комплекта полей, конкретно определяющих эти. Для объектных типов данных (Справочник, Документ, ПланСчетов и др.) — это «Ссылка»; для регистров, подчиненных регистратору (РегистрНакопления, РегистрБухгалтерии, РегистрСведений, подчиненный регистратору и др.) — «Регистратор»; для регистров сведений, неподчиненных регистратору — поля, соответствующие трансформациям, входящим в главный отбор регистра; для констант — идентификатор объекта метаданных Константы.
  • индексируются данные в «соответствии»

Явным методом включением свойства «Индексировать» измерений и реквизитов с значение «Индексировать» и «Индексировать с доп. Упорядочиванием». Вариант ««Индексировать с доп.

Упорядочиванием»» включает в большинстве случаев колонку «код» либо «наименование» в индекс.

Еще одним явным методом можно считать добавление объекта метаданных в объект метаданных «критерий отбора».

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

ВЫБРАТЬ

Код,

Наименование

ПОМЕСТИТЬ ВременнаяТаблица

ИЗ Справочник.Номенклатура

ИНДЕКСИРОВАТЬ ПО Код

В любом случае, нужно осознавать, что говоря об индексах, мы практически подразумеваем индексы СУБД, которая употребляется для 1С:Предприятие. Исключению составляют объекты типа Таблица значений, в то время, когда индексы находятся в RAM (оперативной памяти).

Физическая сущность индексов в MS SQL Server.

Физически эти сохраняются на 8Кб страницах. Сразу после создания, пока таблица не имеет индексов, таблица выглядит как куча (heap) данных. Записи не имеют определенного порядка хранения.

В то время, когда вы желаете получить доступ к данным, SQL Server будет создавать сканирование таблицы  (table scan ). SQL Server сканирует всю таблицу, что бы отыскать искомые записи.

Из этого становятся понятными базисные функции индексов:

— повышение скорости доступа к данным,

— помощь уникальности данных.

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

И чем больше/дольше ключ, тем больше размер индекса. Второй недочёт – замедляются операции  вставки, удаления и обновления записей.

В среде MS SQL Server реализовано пара типов индексов:

  • некластерные индексы;
  • кластерные (либо кластеризованные) индексы;
  • неповторимые индексы;
  • индексы с включенными столбцами
  • индексированные представления
  • полнотекстовый
  • XML

Некластерный индекс

Некластерные индексы – не перестраивают физическую структуру таблицы, а только организуют ссылки на соответствующие строчки.

Для идентификации нужной строки в таблице некластерный индекс организует особые указатели, включающие в себя:

  • данные об идентификационном номере файла, в котором хранится строка;
  • идентификационный номер страницы соответствующих данных;
  • номер искомой строки на соответствующей странице;
  • содержимое столбца.

Некластерных индексов возможно пара для одной таблицы.

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

Некластеризованный индекс по таблице, имеющей кластеризованный индекс

Кластерный (кластеризованный) индекс

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

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

Именно поэтому отпадают лишние операции, которые связаны с обращением к новым и индексу поиском нужной строки в таблице.

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

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

При создании в таблице первичного ключа (PRIMARY KEY) сервер машинально формирует для него кластерный индекс, в случае если его не существовало ранее либо в случае если при определении ключа не был очевидно указан второй тип индекса.

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

Неповторимый индекс

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

значения.

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

Неповторимые индексы направляться определять лишь тогда, в то время, когда это вправду нужно. Для обеспечения целостности данных в столбце возможно выяснить ограничение целостности UNIQUE либо PRIMARY KEY, а не прибегать к неповторимым индексам. Их применение лишь для обеспечения целостности данных есть неоправданной тратой пространства в базе данных.

Помимо этого, на их поддержание тратится и процессорное время.

1С:Предприятие 8 деятельно применяет кластерные неповторимые индексы. Это указывает, что возможно взять неточность не неповторимого индекса.

Если не уникальность содержится в датах с нулевыми значениями, то неприятность решается созданием базы с параметром смещения равным 2000.

«Рыба» скрипта для определения не неповторимых записей:

SELECT COUNT(*) Counter, from

GROUP BY

HAVING Counter 1

Понятие первичного и внешнего ключа

Первичный ключ  (primary key) – это комплект столбцов таблицы, значения которых уникально определяют строчок.

Внешний ключ  (foreign key). Внешним ключом именуется поле таблицы, предназначенное для хранения значения первичного ключа второй таблицы с целью организации связи между этими таблицами. Внешний ключ в таблице может ссылаться и на саму эту таблицу. Такие внешние ключи, по большей части, употребляются для хранения древовидной структуры данных в реляционной таблице.

СУБД поддерживают непроизвольный контроль ссылочной целостности на внешних ключах.

1С не применяет внешние ключи. Ссылочная целостность обеспечивается логикой приложения.

Ограничения индексов

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

Это может повлиять на производительность при количестве какое количество составного типа более 4х.

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

Статистика индексов

Микрософт направляться Server  собирает статистику по полям  и индексам данных, хранимых в базе. Эта статистика употребляется оптимизатором запроса SQL Server при выборе оптимального замысла выполнения запросов на выборку либо обновление данных.

При создании индекса оптимизатор запросов машинально сохраняет эти статистики о проиндексированых столбцах.

Просмотр статистики — sp_helpstats.

Фрагментация индексов

Чрезмерная фрагментация формирует неприятности для громадных операций ввода-вывода. Фрагментация не должна быть больше 25%. От понижения фрагментации индексов смогут победить операции сканирования громадных диапазонов данных.

Для этого рекомендуется делать периодическую дефрагментацию индексов. Обратите внимание, что при дефрагментации индексов (по умолчанию) машинально обновляется статистика.

Наблюдать степень фрагментированности индексов возможно штатными средствами СУБД либо в разрезе объектов метаданных возможно к примеру посредством бесплатного онлайн-сервиса http://www.gilev.ru/sqlsize/

Оптимизация размещения индексов

При количестве таблиц не разрешающем им «разместиться» в оперативной памяти сервера, на первое место выходит скорость дисковой системы (I/O). И тут возможно обратить внимание возможность размещать индексы в отдельных файлах расположенных на различных твёрдых дисках .

Применение индекса из второй файловой группы повышает производительность некластерных индексов в связи с параллельностью исполнения работы ввода/и процессов вывода с самим индексом.

Для определения размеров возможно применять вышеупомянутую обработку.

Влияние индексов на блокировки

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

Вторая обстоятельство блокировок  — малое количество записей в таблицах. Вследствие этого SQL Server, при выборе замысла исполнения запроса, не применяет индексы, а обходит всю таблицу(Table Scan), блокируя полностью. Чтобы избежать аналогичных блокировок, нужно расширить количество записей в таблицах до 1500-2000.

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

Эффективность индексов

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

  • Запросы, каковые показывают «узкие» параметры поиска.  Такие запросы должны считывать только маленькое число строчков, отвечающих определенным параметрам.
  • Запросы, каковые показывают диапазон значений.  Эти запросы кроме этого должны считывать маленькое количество строчков.
  • Поиск, что употребляется в операциях связывания.  Колонки, каковые довольно часто употребляются как ключи связывания, замечательно подходят для индексов.
  • Поиск, при котором эти считываются в определенном порядке.  В случае если результирующий комплект разрешённых должен быть упорядочен в порядке кластеризованного индекса, то сортировка не нужна, потому, что результирующий комплект данных уже заблаговременно упорядочен. К примеру, в случае если кластеризованный индекс создан по колонкам lastname (фамилия), firstname (имя), а для приложения требуется сортировка по фамилии и после этого по имени, то тут нет необходимости додавать инструкцию ORDER BY.

Правда при всей полезности индексов, имеется одно крайне важное НО – индекс должен быть «действенно применяемым» и обязан разрешать  обнаружить эти с применением меньшего числа объёма ввода-и операций вывода системных ресурсов. И напротив, неиспользуемые (редко применяемые) индексы скорее ухудшают скорость записи данных (потому, что любая операция, изменяющая эти, обязана кроме этого обновлять страницы индексов) и создают избыточный количество базы.

Покрывающим  (для данного запроса), именуется индекс в котором имеется все нужные поля для этого запроса. К примеру, в случае если индекс создан по колонкам a, b и c, а оператор SELECT запрашивает эти лишь из этих колонок, то требуется доступ лишь к индексу.

Для того, что бы выяснить эффективность индекса, мы можем примерно оценить посредством бесплатного онлайн-сервиса http://www.gilev.ru/querytj/  показывающий «замысел выполнения запроса» и применяемые индексы.

You must log in to post a comment.

Источник: www.gilev.ru

Индексация в Базах Данных

Важное на сайте:

Самые интересные результаты статей, подобранные именно по Вашим интересам:

  • Что такое индекс на банковской карте

    Разбираемся с индексами на базе битовых карт Джонатан Льюис (Jonathan Lewis) Индексы на базе битовых карт — великое благо для некоторых видов приложений,…

  • Индексирование

    Материал из ПИЭ.Wiki Индексирование (indexing) — это метод обеспечения стремительного доступа к значениям колонки либо комбинации колонок. Физически…

  • Как узнать номер киви кошелька и другие реквизиты

    Частенько по окончании регистрации в разных платежных совокупностях пользователи забывают информацию о реквизитах, каковые нужны для совершения денежных…

  • "Эффективная рекламная акция"

    Андрей Надеин Untitled Document Какой рекламист не грезит вытворить что-то такое, о чем бы заговорили целый город, страна, мир? Поболтаем о маленьких…

  • Mountain_world

    Мы вышли из дома Сейчас мы желаем поведать Вам о некоторых изюминках, каковые направляться учитывать, пребывав в Абхазии. Валюты, имеющие хождение в…

  • Как узнать индекс почты

    Как и где возможно определить почтовый индекс по адресу Часто при заполнении разных форм требуется заполнять информацию об адресе с указанием почтового…