Индексиране в СУБД: Какво е, Видове индекси с ПРИМЕРИ

⚡ Умно обобщение

Индексирането в базата данни е техника за структуриране на данни, която бързо извлича записи чрез картаping ключ за търсене на адреса на диска на неговия запис. Първичните, вторичните, клъстерните, многостепенните и B-дървото индексират всяко пространство за търговия, скорост и поддръжка по различен начин.

  • 🗂️ Основна идея: Индексът е малка таблица с две колони, която свързва ключ с указател към дисковия блок на записа.
  • 📇 Основен индекс: Подреден файл върху ключа, разделен на плътни и разредени варианти.
  • ???? Плътно срещу рядко: Плътният индекс съхранява по един запис за всеки ключ; разреденият индекс съхранява по-малко записи, за да спести място.
  • ???? ️ Вторичен индекс: Изграден върху поле без подреждане, той използва кофи, за да достигне до всеки съответстващ запис.
  • ???? ClusterИндекс на инг: Групира редове, които споделят неуникален ключ, в един клъстер.
  • 🌳 Индекс на B-дърво: Балансирано многостепенно дърво, чиито свързани листни възли поддържат произволен и последователен достъп.
  • Компромис: Индексите ускоряват четенето, но забавят вмъкването, актуализирането и изтриването и консумират допълнително място.

Индексиране в базата данни

Какво е индексиране?

Индексирането е техника за структуриране на данни, която ви позволява бързо да извличате записи от файл на база данни. Индексът е малка таблица, имаща само две колони. Първата колона съдържа копие на първичния или кандидат-ключ на таблица. Втората му колона съдържа набор от указатели съхраняващ адреса на дисковия блок, където се съхранява тази специфична ключова стойност.

Индекс:

  • Приема ключ за търсене като вход.
  • Ефективно връща колекция от съвпадащи записи.

Без индекс, базата данни трябва да сканира всеки ред, за да отговори на заявка. С такъв, тя преминава директно към съответстващия блок, поради което избраният тип индекс има голямо влияние върху производителността.

Видове индексиране в СУБД

Тип индекси в базата данни
Тип индекси в базата данни

Индексирането в база данни се определя въз основа на нейните атрибути за индексиране. Двата основни типа методи за индексиране са:

  • Първично индексиране
  • Вторично индексиране

Първичен индекс в СУБД

Първичният индекс е подреден файл с фиксирана дължина и две полета. Първото поле е същото като първичния ключ, а второто поле сочи към този специфичен блок данни. В първичния индекс винаги има връзка „един към един“ между записите в индексната таблица.

Основният индекс също е допълнително разделен на два вида:

  • Плътен индекс
  • Разреден индекс

Плътен индекс

В плътен индекс се създава запис за всяка стойност на ключ за търсене в базата данни. Това ви помага да търсите по-бързо, но изисква повече място за съхранение на индексни записи. При този метод записите съдържат стойността на ключа за търсене и сочат към реалния запис на диска.

Плътен индекс в СУБД

Разреден индекс

Разреденият индекс е индексен запис, който се появява само за някои от стойностите във файла. Разреденият индекс ви помага да разрешите проблемите с плътното индексиране в СУБДПри тази техника, набор от индексни колони съхраняват един и същ адрес на блок от данни и когато е необходимо да се извлекат данни, този адрес на блок се извлича.

Разреденият индекс съхранява индексни записи само за някои стойности на ключове за търсене. Той изисква по-малко място и по-малко разходи за поддръжка за вмъквания и изтривания, но е по-бавен от плътния индекс за намиране на записи.

По-долу е даден пример за разреден индекс в база данни.

Разреден индекс в СУБД

Плътен индекс срещу разреден индекс

Двата основни варианта на индекса правят противоположни компромиси, обобщени по-долу.

Аспект Плътен индекс Разреден индекс
Записи По един на ключ за търсене По един на блок
Космос Повече Less
Скорост на търсене По-бързо По-бавно
поддръжка По-висок Спуснете

Вторичен индекс в СУБД

Вторичният индекс в СУБД може да бъде генериран от поле, което има уникална стойност за всеки запис и трябва да бъде кандидат-ключ. Известен е още като неклъстерен индекс.

Тази техника за индексиране на база данни на две нива се използва за намаляване на картатаping размер на първото ниво. За първото ниво е избран голям диапазон от числа, така че картатаping размерът винаги остава малък.

Пример за вторичен индекс

Нека разберем вторичното индексиране с пример за индексиране на база данни. В база данни за банкови сметки данните се съхраняват последователно по acc_no, но може да искате да намерите всички сметки в конкретен клон на банка ABC.

Тук можете да имате вторичен индекс за всеки ключ за търсене. Индексният запис сочи към контейнер, който съдържа указатели към всички записи с тази конкретна стойност на ключа за търсене.

Вторичен индекс в СУБД

Clustering Index в СУБД

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

Пример: Да предположим, че една компания е наела много служители в различни отдели. В този случай трябва да се създаде индекс за клъстериране за всички служители, които принадлежат към един и същ отдел.

Те се разглеждат като един клъстер, а индексът сочи към клъстера като цяло. Тук Department_no е неуникален ключ.

Какво е многостепенен индекс?

Многостепенното индексиране се създава, когато първичният индекс не се побира в паметта. При този тип метод на индексиране можете да намалите броя на достъпите до диска, за да достигнете до който и да е запис. Записите се съхраняват на диск като последователен файл, а върху този файл се създава разреден индекс.

Многостепенен индекс в СУБД

Индекс на B-дърво

B-дървовидният индекс е най-широко използваната структура от данни за дървовидно индексиране в СУБД. Това е многостепенен формат за дървовидно индексиране, който използва балансирано... двоични дървета за търсенеВсички листни възли на B-дървото съдържат действителните указатели към данни.

Освен това, всички листови възли са взаимосвързани със свързан списък, което позволява на B-дървото да поддържа както произволен, така и последователен достъп.

B-дърво индекс в СУБД

  • Листните възли трябва да имат между 2 и 4 стойности.
  • Всеки път от корена до листа е предимно с еднаква дължина.
  • Нелистните възли, освен коренния възел, имат между 3 и 5 дъщерни възела.
  • Всеки възел, който не е корен или лист, има между n/2 и n деца.

Където доминират търсенията с точно съвпадение и сканирането на диапазони е рядкост, хеширане може да бъде по-бърза алтернатива на индекса тип B-дърво.

Предимства на индексирането

Важните предимства на индексирането са:

  • Това помага за намаляване на общия брой входно-изходни операции, необходими за извличане на данни, така че не е необходимо да осъществявате достъп до ред директно от таблицата.
  • Той предлага по-бързо търсене и извличане на данни на потребителите.
  • Това може да намали табличното пространство, защото не е необходимо да съхранявате ROWID в индекса за всеки свързан ред.
  • Данните в крайните възли вече са подредени по стойността на ключа.

Недостатъци на индексирането

Съществените недостатъци на индексирането са:

  • За да извършите индексиране, ви е необходим първичен ключ на таблицата с уникална стойност.
  • Не можете да изградите друг индекс върху данни, които вече са организирани по същия начин.
  • Нямате право да разделяте организирана по индекс таблица.
  • Индексирането намалява производителността при заявки INSERT, DELETE и UPDATE.

Въпроси и Отговори

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

B-дървото остава балансирано, така че всяко търсене изисква подобен малък брой четения от диска, а свързаните с него листа поддържат сканиране на диапазони. Това го прави силно както за точкови, така и за диапазонни заявки.

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

Консултантите по индекси с изкуствен интелект изучават натоварването на заявките и препоръчват индекси, които биха намалили най-много разходите, като същевременно маркират съществуващи индекси, които никога не се използват и само добавят режийни разходи.

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

Обобщете тази публикация с: