Індекс07 Індекс (англ. index) — об.єкт бази даних, що створений з ціллю підвищення ефективності виконання запитів. Таблиці в базі даних можуть мати велику кількість рядків, які зберігаються в довільному порядку, і їх пошук по заданому значенню шляхом послідовного перегляду таблиці рядок за рядком може займати багато часу. Індекс формується зі значень одного чи кількох стовпчиків таблиці і вказівників на відповідні рядки таблиці і, таким чином, дозволяє знаходити потрібний рядок по заданому значенню. Прискорення роботи з використанням індексів досягається в першу чергу за рахунок того, що індекс має структуру, що оптимізована для пошуку - наприклад, збалансованого дерева. Деякі СКБД розширюють можливості індексів введенням можливості створення індексів по виразам. Наприклад, індекс може бути створенний по виразу upper(last_name) і відповідно буде зберігати посилання, ключем яких будуть значення поля last_name в верхньому регістрі. Крім цього, індекси можуть бути оголошенні як унікальні так і не унікальні. Унікальний індекс реалізує обмеження цілісності на таблиці, виключаючи можливість вставки значень, що повторюються. Обмеження Індекси корисні для багатьох програм, однак на їхнє використання накладаються обмеження. Візьмемо такий запит SQL: SELECT first_name FROM people WHERE last_name = .Франкенштейн... Для виконання такого запиту без індексу СКБД повинна перевірити поле last_name у кожному рядку таблиці (цей механізм відомий як «повний перебір» або «повний скан таблиці», у плані може відображатися словом «NATURAL»). При використанні індексу СКБД просто проходить по бінарному дереву, поки не знайде запис |Франкенштейн|. Такий прохід вимагає набагато менше ресурсів, ніж повний перебір таблиці. Тепер візьмемо такий запит: SELECT email_address FROM customers WHERE email_address LIKE .%@yahoo.com... Цей запит повинен нам знайти всіх клієнтів, у яких е-мейл закінчується на |@yahoo.com|, однак навіть якщо по стовпцю email_address є індекс, СКБД все одно буде використати повний перебір таблиці. Це пов.язане з тим, що індекси будуються в припущенні, що слова/символи йдуть зліва на право. Використання символу підстановки на початку умови пошуку виключає для СКБД можливість використання пошуку по бінарному дереву. Ця проблема може бути вирішена створенням додаткового індексу по виразу reverse(email_address) і формуванням запиту виду: select email_address from customers where reverse(email_address) like reverse(.%@yahoo.com.).. У цьому випадку символ підстановки виявиться в найбільш правій позиції (|[email protected]%|), що не виключає використання індексу по reverse(email_address).