
- •Із чого почати?
- •Історія розвитку sql
- •Керування базами даних за допомогою sql
- •Опис навчальної бази даних
- •Структура операторів і базові елементи мови
- •Синтаксис оператора select
- •Використання умов пошуку для відбору рядків
- •Одержання підсумкових даних
- •Сортування результатів запиту
- •Прості запити й правила їхнього виконання
- •Особливості багатотабличних запитів
- •Об'єднання таблиць
- •Використання вкладених запитів
- •Використання операторів exists, any, all, і some
- •Додавання інформації в базу даних
- •Видалення даних
- •Зміна існуючих даних
- •Створення баз даних
- •Створення таблиць
- •Індекси
- •Визначення умов перевірки
- •Створення синонімів
Індекси
Індексом прийнято називати впорядкований список полів або груп полів у таблиці. Таблиці можуть мати величезна кількість записів, при цьому, як було замічено вище, записи не перебувають у якому-небудь певному порядку, тому на їхній пошук за зазначеним критерієм може знадобитися досить тривалий час.
Індексна адреса - це спеціальний метод забезпечення об'єднання всіх значень у групи з однієї або більше записів, які відрізняються одна від інший, тому що унікальність записів часто необхідна.
Індекси - це корисний інструмент, що широко застосовується у всіх сучасних СКБД. Коли створюється індекс у поле, БД запам'ятовує відповідний порядок всіх значень цього поля в області пам'яті. Про переваги індексів може говорити наступне: припустимо, що таблиця STUDENTS має кілька тисяч записів, і необхідно знайти студента з конкретним номером студентського квитка. Т.к. запису в таблиці не впорядковані, те СКБД буде змушена переглядати всю таблицю, рядок за рядком, перевіряючи щораз значення поля SNUM на рівність шуканому значенню. При наявності індексу в поле SNUM, система могла б знайти шуканий номер прямо в цьому впорядкованому індексі, і дати інформацію про те, як знайти правильний рядок таблиці.
В індексів є й недоліки. У той час як індекс значно поліпшує ефективність запитів, використання індексу трохи сповільнює операції модифікації, особливо такі, як INSERT й DELETE. Крім того, сам індекс займає місце на пристрої зберігання інформації,
Звідси випливає, що при створенні таблиці необхідно прийняти зважене рішення, індексувати її чи ні. Індекси можуть складатися відразу з декількох полів, при цьому перше поле є як би головним, друге впорядковується усередині першого, третє усередині другого, і т.д.
Синтаксис команди для створення індексу наступний:
CREATE INDEX <INDEX 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 є неунікальні значення. Тому рекомендується створювати індекси відразу після того, як створена таблиця й до уведення в неї яких-небудь значень. Цікава й така особливість унікального індексу: якщо в ньому використається більше одного поля (тобто він є комбінацією значень), те, загалом кажучи, кожне із цих полів може й не бути унікальним.
Оскільки основною ознакою індексу є його ім'я, то по його імені він може бути ідентифікований і вилучений. Звичайно користувачі не знають про існування індексу, a SQL автоматично визначає - чи дозволено користувачеві використати індекс, і, якщо так, те дозволяє його вживання.
Однак, для видалення індексу, необхідно знати його ім'я. З обліком цього команда для видалення має наступний синтаксис:
DROP INDEX <INDEX NAME>;
Наприклад, для видалення створеного індексу на прізвище студента, можна скористатися наступною командою:
DROP INDEX SFAMIDX;
Урахуйте, що видалення індексу в жодному разі не впливає на дані, які втримуються в полях.