Sobes.tech
Middle

Как индексът оптимизира изпълнението на заявката?

sobes.tech AI

Отговор от AI

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

Процесът на оптимизация:

  1. Бързо търсене: Вместо пълно сканиране на цялата таблица (full table scan), системата за управление на бази данни (СУБД) преглежда индекса. Индексът е сортиран и оптимизиран за бързо търсене по определени колони.
  2. Намаляване на обема на четените данни: Индексът съдържа само индексните колони и указатели, което значително намалява обема на данните, които трябва да се прочетат от диска, в сравнение с четенето на цял ред или цяла страница с данни.
  3. Без сортиране: Индексът вече е сортиран по индексните колони. Това елиминира необходимостта от извършване на скъпоструваща операция по сортиране, ако заявката изисква сортиран резултат.
  4. Оптимизация на JOIN операциите: При съединяване на таблици (JOIN) по индексни колони, СУБД може да използва индекса за бързо намиране на съответните редове в друга таблица, вместо да изпълнява вложени цикли върху цялата таблица.

Пример:

Без индекс по колоната LastName за заявката SELECT * FROM Users WHERE LastName = 'Ivanov', СУБД трябва да прочете всеки ред в таблицата Users и да провери стойността на LastName.

С индекс по LastName, СУБД бързо намира записите, където LastName е равен на 'Ivanov', преглеждайки сортирания индекс, а след това използва указателите от индекса, за да получи пълните данни на редовете от основната таблица.

-- Пример за заявка, която се възползва от индекса по LastName
SELECT UserId, FirstName
FROM Users
WHERE LastName = 'Ivanov';
-- Пример за създаване на индекс за оптимизация на горната заявка
CREATE INDEX IX_Users_LastName ON Users (LastName);