Індексом прийнято називати впорядкований список полів або груп полів в таблиці. Таблиці можуть мати величезну кількість записів, при цьому, як було помічено вище, записи не знаходяться в якому-небудь певному порядку, тому на їхній пошук по вказаному критерію може потрібно достатньо тривалий час.
Індексна адреса - це спеціальний метод забезпечення об'єднання всіх значень в групи з однієї або більше записів, які відрізняються одна від одної, т.к. унікальність записів часто необхідна.
Індекси - це корисний інструмент, який широко застосовується у всіх сучасних СУБД. Коли створюється індекс в полі, БД запам'ятовує відповідний порядок всіх значень цього поля в області пам'яті. Про переваги індексів може говорити наступне: припустимо, що таблиця STUDENTS має декілька тисяч записів, і необхідно знайти студента з конкретним номером студентського квитка. Т.к. записи в таблиці не впорядковані, то СУБД буде вимушена переглядати всю таблицю, рядок за рядком, перевіряючи кожного разу значення поля SNUM на рівність шуканому значенню. За наявності індексу в полі SNUM, система могла б знайти шуканий номер прямо в цьому впорядкованому індексі, і дати інформацію про те, як знайти правильний рядок таблиці.
В індексів є і недоліки. Тоді як індекс значно поліпшує ефективність запитів, використовування індексу дещо уповільнює операції модифікації, особливе такі, як INSERT і DELETE. Крім того, сам індекс займає місце на пристрої зберігання інформації.
Звідси витікає, що при створенні таблиці необхідно ухвалити зважене рішення, індексувати її чи ні. Індекси можуть полягати відразу з декількох полів, при цьому перше поле є як би головним, друге упорядковується усередині першого, третє усередині другого, і т. д.
Синтаксис команди для створення індексу наступний:
CREATE INDEX <INDSX NAME> ON <TABLE NAME> (<COLUMN NAME> [,<COLUMN NAME>]...);
Зрозуміло, що таблиця, для якої створюється індекс, повинна вже існувати і містити імена полів, що індексуються. При цьому ім'я індексу не може бути використане для чого-небудь іншого в БД і SQL сам вирішує, коли він необхідний для роботи і використовує його автоматично.
Наведемо наступний приклад. Очевидно, що в таблиці STUDENTS одним з найбільш часто уживаних може бути индеке по полю, що містить прізвище студента. Тоді команда для створення такого індексу буде наступною:
CREATE INDEX SFAMIDX ON STUDENTS (SFAM);
Після цього при пошуку інформації про студентів, СУБД буде знаходити її дуже швидко. Проте, при створенні цього індексу, йому не наказала унікальність, не дивлячись на те. що це є одним з його призначень.
Для створення унікальних (повторюються значень, що не містять) індексів використовують ключове слово UNIQUE в команді CREATE INDEX. Фактично такий індекс буде бути первинним ключем таблиці. Наприклад, для таблиці STUDENTS поле SNUM підходить в якості первинного ключа, і він стане першим кандидатом для унікального індексу. Створити його можна командою:
CREATE UNIQUE INDEX
SNUMIDX ON STUDENTS (SNUM) ;
Майте на увазі, що ця команда не буде виконана, якщо в полі SNUM є неунікальні значення. Тому рекомендується створювати індекси відразу після того, як створена таблиця і до введення в неї яких-небудь значень. Цікава і така особливість унікального індексу: якщо в ньому використовується більше одного поля (тобто він є комбінацією значень), то. взагалі кажучи, кожне з цих полів може і не бути унікальним.
Оскільки основною ознакою індексу є його ім'я. то по його імені він може бути ідентифікований і видалений. Звичайно користувачі не знають про існування індексу, SQL автоматично визначає - чи дозволено користувачу використати індекс, і, якщо так. то дозволяє його вживання.
Проте, для видалення індексу, необхідно знати його ім'я. З урахуванням цього команда для видалення має наступний синтаксис: DROP INDEX <INDEX NAME>;
Наприклад, для видалення створеного індексу по прізвищу студента, можна скористатися наступною командою: DROP INDEX SFAMIDX;
Врахуйте, що видалення індексу у жодному випадку не впливає на дані, які містяться в полях.