Сьогодні мова піде про індексах СУБД MS SQL і їх внутрішній устрій. Я спробую розповісти про індексах і з точки зору СУБД, і з точки зору 1С 8.3.
Індекси - набір посилань, упорядкованих за певними стовпцями, створюваний з метою оптимізації продуктивності СУБД MS SQL.
Індекси в 1С
В системі 1С індекси створюються двома способами - явним і неявним чином.
Створення індексів неявним чином:
Платформа створює індекси сама по заздалегідь відомим для кожного об'єкта метаданих ключам даних (посилання, код, найменування, вимірювання і т.п.)
Створення індексів явно можлива трьома способами:
- Установка прапора «індексувати» у поля (реквізиту / вимірювання). Варіант «Чи індексувати з доп. упорядкуванням »додає в індекс поле« Код »або« Найменування »(перш за все для динамічних списків ).
- Додавання поля в « Критерії відбору «.
- Вказівка индексируемого поля в запит за допомогою конструкції « індексувати за «.
Індекси в СУБД Microsoft SQL
Індекси в СУБД MS SQL являють собою сторінки з даними по 8 Кбайт кожна. Незважаючи на те, що індекси покликані поліпшити продуктивність СУБД, у них є певні недоліки - вони займають місце на диску і сповільнюють роботу СУБД на запис рядків.
Види індексів в СУБД MS SQL:
- Некластерние індекси - такі індекси не перебудовують таблиці, а лише організовують посилання.
- Кластерні індекси потрібні для побудови таблиці відповідно до індексу. Дані впорядковані, наприклад, за алфавітом. Неприпустимий для часто змінюються стовпців, тому що СУБД постійно фізично перебудовує таблицю за цим індексом.
- Унікальні індекси - свого роду «надбудова» для кластерних і некластерних індексів. Такий індекс унікальний по ключових полях.
Види ключів в СУБД:
- Первинний ключ (primary) - набір стовпців, унікально характеризують рядок.
- Зовнішній ключ (foreign) - поле таблиці, що зберігає значення первинного ключа з метою організації зв'язку між таблицями. 1С не використовує даний вид ключів.
Важливі нюанси використання індексів
Довжина ключа індексу в основних СУБД (всіх, окрім файлового варіанту) - не більше 900 байт і 16 різних полів.
Запускайте частіше дефрагментацію індексів на рівні СУБД MS SQL: при частому використанні індексів можлива поява ефекту фрагментації, не можна допускати рівня фрагментації вище 25%.
Відсутність індексів може привести до повного сканування таблиці (table scan), що, в свою чергу, призведе до надмірної блокування.
Однак не варто включати індексацію по невеликих наборів даних (наприклад, довідник Організації) - побудова індексу може привести до зворотного ефекту, швидкодія знизиться.