logo

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

  • Индексирането се използва за оптимизиране на производителността на база данни чрез минимизиране на броя на дисковите достъпи, необходими при обработка на заявка.
  • Индексът е вид структура от данни. Използва се за бързо намиране и достъп до данните в таблица на база данни.

Структура на индекса:

Индексите могат да бъдат създадени с помощта на някои колони на базата данни.

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

Методи за индексиране

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

Подредени индекси

Индексите обикновено са сортирани, за да направят търсенето по-бързо. Индексите, които са сортирани, са известни като подредени индекси.

Пример : Да предположим, че имаме таблица на служители с хиляди записи, всеки от които е с дължина 10 байта. Ако техните идентификационни номера започват с 1, 2, 3.... и така нататък и трябва да търсим студент с ID-543.

  • В случай на база данни без индекс, трябва да търсим дисковия блок от началото, докато достигне 543. СУБД ще прочете записа, след като прочете 543*10=5430 байта.
  • В случай на индекс ще търсим с помощта на индекси и СУБД ще прочете записа след прочитане на 542*2= 1084 байта, което е много по-малко в сравнение с предишния случай.

Първичен индекс

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

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

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

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

  • Във файла с данни индексният запис се появява само за няколко елемента. Всеки елемент сочи към блок.
  • При това, вместо да сочи към всеки запис в главната таблица, индексът сочи към записите в главната таблица в интервал.
СУБД Индексиране в СУБД

Индекс на групиране

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

Пример : да предположим, че една компания има няколко служители във всеки отдел. Да предположим, че използваме индекс за клъстериране, където всички служители, които принадлежат към един и същ Dept_ID, се разглеждат в рамките на един клъстер, а указателите на индекса сочат към клъстера като цяло. Тук Dept_Id е неуникален ключ.

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

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

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

Вторичен индекс

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

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

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

Например:

  • Ако искате да намерите записа на хвърляне 111 в диаграмата, тогава той ще търси най-високия запис, който е по-малък или равен на 111 в индекса на първо ниво. Ще получи 100 на това ниво.
  • След това във второто ниво на индекса отново прави макс. (111)<= 111 and gets 110. now using the address 110, it goes to data block starts searching each record till 111. < li>
  • Ето как се извършва търсене в този метод. Вмъкването, актуализирането или изтриването също се извършва по същия начин.