Індекс (англ. index) — об'єкт бази даних, що створений з метою підвищення ефективності виконання запитів. Таблиці в базі даних можуть мати велику кількість рядків, які зберігаються у довільному порядку, і їх пошук за заданим значенням шляхом послідовного перегляду таблиці рядок за рядком може займати багато часу. Індекс формується зі значень одного чи кількох стовпчиків таблиці і вказівників на відповідні рядки таблиці і, таким чином, дозволяє знаходити потрібний рядок за заданим значенням. Прискорення роботи з використанням індексів досягається в першу чергу за рахунок того, що індекс має структуру, що оптимізована для пошуку — наприклад, збалансованого дерева. Деякі СКБД розширюють можливості індексів введенням можливості створення індексів за виразами. Наприклад, індекс може бути створений за виразом upper(last_name)
і відповідно буде зберігати посилання, ключем яких будуть значення поля last_name в верхньому регістрі. Крім цього, індекси можуть бути оголошенні як унікальні так і не унікальні. Унікальний індекс реалізує обмеження цілісності на таблиці, виключаючи можливість вставки значень, що повторюються.
Архітектура
Існує два типи індексів: кластерні та некластерні. У кожної таблиці може бути тільки один кластерний індекс і багато некластерних. При присутності кластерного індексу рядки таблиці фізично зберігаються в заданому порядку і напряму зв'язані з елементами індексу, завдяки чому значно прискорюється доступ до даних при виконанні запитів, що використовують даний індекс. Якщо в таблиці немає кластерного індексу, таблиця є невпорядкованою. Некластерний індекс, створений для такої таблиці, містить лише вказівник на записи таблиці, в зв'язку з чим при вибірці необхідно принаймні ще одне звертання до диску для отримання саме запису таблиці.
Індекси фізично можуть бути реалізовані різними структурами. Найчастіше вживані B+ дерева і хеш-таблиці.
Послідовність стовпців в складеному індексі
Послідовність, в якій представлені стовпці в складеному індексі, досить важлива. Справа в тому, що отримати набір даних за запитом, що зачіпає лише перший з проіндексованих стовпців, можна. Однак у більшості СКБД неможливе або неефективне отримання даних тільки за другим і так далі проіндексованим стовпцям (без обмежень на перший).
Наприклад, уявімо собі телефонний довідник, відсортований спочатку за містом, потім за прізвищем, і потім за іменем. Якщо ви знаєте місто, тоді ви легко можете знайти всі телефони цього міста. Однак у такому довіднику буде складно знайти всі телефони, записані на певне прізвище — для цього необхідно подивитися в секцію кожного міста і пошукати там потрібну інформацію. Деякі СКБД виконують цю роботу, інші ж просто не використовують такий індекс.
Ефективність
Для оптимальної ефективності запитів індекси зазвичай створюються на тих стовпцях таблиці, які часто використовуються в запитах. Для однієї таблиці можуть бути створені кілька індексів. Однак збільшення числа індексів уповільнює операції додавання, оновлення, видалення рядків таблиці, оскільки при цьому необхідно оновлювати самі індекси. Крім цього індекси займають додатковий обсяг пам'яті, тому перед створенням індексу потрібно впевнитися, що виграш, який планується в ефективності запитів переважить додаткові витрати ресурсів комп'ютера на супроводження індексу.
Обмеження
Індекси корисні для багатьох програм, однак на їхнє використання накладаються обмеження. Візьмемо такий запит 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');
. У цьому випадку символ підстановки виявиться в найправішій позиції («moc.oohay@%»), що не виключає використання індексу за reverse(email_address).
Ця стаття не містить . (березень 2015) |
Ця стаття містить текст, що не відповідає . (січень 2016) |
Це незавершена стаття про бази даних. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Indeks angl index ob yekt bazi danih sho stvorenij z metoyu pidvishennya efektivnosti vikonannya zapitiv Tablici v bazi danih mozhut mati veliku kilkist ryadkiv yaki zberigayutsya u dovilnomu poryadku i yih poshuk za zadanim znachennyam shlyahom poslidovnogo pereglyadu tablici ryadok za ryadkom mozhe zajmati bagato chasu Indeks formuyetsya zi znachen odnogo chi kilkoh stovpchikiv tablici i vkazivnikiv na vidpovidni ryadki tablici i takim chinom dozvolyaye znahoditi potribnij ryadok za zadanim znachennyam Priskorennya roboti z vikoristannyam indeksiv dosyagayetsya v pershu chergu za rahunok togo sho indeks maye strukturu sho optimizovana dlya poshuku napriklad zbalansovanogo dereva Deyaki SKBD rozshiryuyut mozhlivosti indeksiv vvedennyam mozhlivosti stvorennya indeksiv za virazami Napriklad indeks mozhe buti stvorenij za virazom upper last name i vidpovidno bude zberigati posilannya klyuchem yakih budut znachennya polya last name v verhnomu registri Krim cogo indeksi mozhut buti ogoloshenni yak unikalni tak i ne unikalni Unikalnij indeks realizuye obmezhennya cilisnosti na tablici viklyuchayuchi mozhlivist vstavki znachen sho povtoryuyutsya ArhitekturaIsnuye dva tipi indeksiv klasterni ta neklasterni U kozhnoyi tablici mozhe buti tilki odin klasternij indeks i bagato neklasternih Pri prisutnosti klasternogo indeksu ryadki tablici fizichno zberigayutsya v zadanomu poryadku i napryamu zv yazani z elementami indeksu zavdyaki chomu znachno priskoryuyetsya dostup do danih pri vikonanni zapitiv sho vikoristovuyut danij indeks Yaksho v tablici nemaye klasternogo indeksu tablicya ye nevporyadkovanoyu Neklasternij indeks stvorenij dlya takoyi tablici mistit lishe vkazivnik na zapisi tablici v zv yazku z chim pri vibirci neobhidno prinajmni she odne zvertannya do disku dlya otrimannya same zapisu tablici Indeksi fizichno mozhut buti realizovani riznimi strukturami Najchastishe vzhivani B dereva i hesh tablici Poslidovnist stovpciv v skladenomu indeksiPoslidovnist v yakij predstavleni stovpci v skladenomu indeksi dosit vazhliva Sprava v tomu sho otrimati nabir danih za zapitom sho zachipaye lishe pershij z proindeksovanih stovpciv mozhna Odnak u bilshosti SKBD nemozhlive abo neefektivne otrimannya danih tilki za drugim i tak dali proindeksovanim stovpcyam bez obmezhen na pershij Napriklad uyavimo sobi telefonnij dovidnik vidsortovanij spochatku za mistom potim za prizvishem i potim za imenem Yaksho vi znayete misto todi vi legko mozhete znajti vsi telefoni cogo mista Odnak u takomu dovidniku bude skladno znajti vsi telefoni zapisani na pevne prizvishe dlya cogo neobhidno podivitisya v sekciyu kozhnogo mista i poshukati tam potribnu informaciyu Deyaki SKBD vikonuyut cyu robotu inshi zh prosto ne vikoristovuyut takij indeks EfektivnistDlya optimalnoyi efektivnosti zapitiv indeksi zazvichaj stvoryuyutsya na tih stovpcyah tablici yaki chasto vikoristovuyutsya v zapitah Dlya odniyeyi tablici mozhut buti stvoreni kilka indeksiv Odnak zbilshennya chisla indeksiv upovilnyuye operaciyi dodavannya onovlennya vidalennya ryadkiv tablici oskilki pri comu neobhidno onovlyuvati sami indeksi Krim cogo indeksi zajmayut dodatkovij obsyag pam yati tomu pered stvorennyam indeksu potribno vpevnitisya sho vigrash yakij planuyetsya v efektivnosti zapitiv perevazhit dodatkovi vitrati resursiv komp yutera na suprovodzhennya indeksu ObmezhennyaIndeksi korisni dlya bagatoh program odnak na yihnye vikoristannya nakladayutsya obmezhennya Vizmemo takij zapit SQL SELECT first name FROM people WHERE last name Frankenshtejn Dlya vikonannya takogo zapitu bez indeksu SKBD povinna pereviriti pole last name u kozhnomu ryadku tablici cej mehanizm vidomij yak povnij perebir abo povnij skan tablici u plani mozhe vidobrazhatisya slovom NATURAL Pri vikoristanni indeksu SKBD prosto prohodit po binarnomu derevu poki ne znajde zapis Frankenshtejn Takij prohid vimagaye nabagato menshe resursiv nizh povnij perebir tablici Teper vizmemo takij zapit SELECT email address FROM customers WHERE email address LIKE yahoo com Cej zapit povinen nam znajti vsih kliyentiv u yakih elektronna adresa zakinchuyetsya na yahoo com odnak navit yaksho po stovpcyu email address ye indeks SKBD vse odno bude vikoristati povnij perebir tablici Ce pov yazane z tim sho indeksi buduyutsya v pripushenni sho slova simvoli jdut zliva na pravo Vikoristannya simvolu pidstanovki na pochatku umovi poshuku viklyuchaye dlya SKBD mozhlivist vikoristannya poshuku po binarnomu derevu Cya problema mozhe buti virishena stvorennyam dodatkovogo indeksu za virazom reverse email address i formuvannyam zapitu vidu select email address from customers where reverse email address like reverse yahoo com U comu vipadku simvol pidstanovki viyavitsya v najpravishij poziciyi moc oohay sho ne viklyuchaye vikoristannya indeksu za reverse email address Cya stattya ne mistit posilan na dzherela Vi mozhete dopomogti polipshiti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Material bez dzherel mozhe buti piddano sumnivu ta vilucheno berezen 2015 Cya stattya mistit tekst sho ne vidpovidaye enciklopedichnomu stilyu Bud laska dopomozhit udoskonaliti cyu stattyu pogodivshi stil vikladu zi stilistichnimi pravilami Vikipediyi Mozhlivo storinka obgovorennya mistit zauvazhennya shodo potribnih zmin sichen 2016 Ce nezavershena stattya pro bazi danih Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi