Щотаке індекс mysql і як їх використовувати

Можете навести зрозумілий приклад індексу таблицях? У документаціях стільки всього написано, це вводить в оману. Індекс – це і є первинний чи зовнішній ключ?

Якщо в короткій, то індекс, це поле по якому оптимізований (прискорений) пошук.

Оскільки індекс займає місце, то індексувати потрібно ті поля, якими відбувається вибірка.

Допустимо є таблиця.

Допустимо вам потрібен пошук на ім'я (firstname).

тоді є сенс додати індекс по даному полю.

Буде створена "карта", яка дозволить легко знаходити записи в оригінальному списку.

Для однієї невеликої таблиці перевага не буде очевидною за кілька (3-4 вже достатньо) таблиць по неіндексованих полях. Вбиває сервер на один раз!

Коротко індекси створюються для підвищення продуктивності пошуку даних. Таблиці можуть мати безліч рядків, які зберігаються в довільному порядку. Без індексу пошук потрібних рядків йде порядку (послідовно), що у великих обсягах даних забирає багато часу.

Індекс - зазвичай один або кілька стовпців таблиці та покажчиків на відповідні рядки таблиці, що дозволяє шукати рядки, що задовольняють критерію пошуку. Прискорення роботи з використанням індексів досягається в першу чергу за рахунок того, що індекс має структуру, оптимізовану під пошук - наприклад, MySQL b-дерева. Індекс краще використовувати на тих стовпцях таблиці, на які ви найчастіше накладатимете умови через where column_name = .

Індекс створюється за правилом:

Наприклад, у вас таблиця називається test , де зберігаються дані містами Укаїни з вулицями виду Місто, Вулиця, Будинок. Зрозуміло, що рядків у таблиці за такого розкладу буде багато. Якщо ви часто робите вибірку по певному місту,наприклад:

те, щоб цей запит відпрацював швидше, ніж звичайно, слід додати індекс за вищевказаним правилом:

Тоді той самий запит

відпрацює набагато швидше, якщо стовпець city буде проіндексовано.

На пальцях можна пояснити так:

Коли Ви створюєте таблицю, додаєте до неї дані, то таблиця розростається і вона виглядає як послідовний список, упорядкований після того як до неї дані додавалися.

Коли даних мало, список маленький і всі запити до неї виконуються майже непомітно. Але коли кількість записів у таблиці починає перевалювати за мільйон (у різних випадках по-різному, але як приклад мільйон), то у Вас пошук уже йде не так швидко і з додаванням нових і нових записів - ще повільніше.

Це пов'язано з тим, що коли Ви шукаєте якийсь запис, проглядаються всі записи, поки не дійдуть до потрібного.

Коли Вам це остаточно набридає і Ви хочете щось зробити, то до Вас на допомогу приходять індекси.

Індекс створюється по якомусь певному полю (можна за кількома) яким, зазвичай, виконується пошук. Коли Ви створюєте індекс, MySql (і будь-яка інша БД) обходить всі записи в таблиці і будує дерево (скоріше за все B-дерево або різновид), в якому ключами виступає обране поле, а вмістом посилання на записи в таблиці.

І коли Ви робите черговий свій select запит по таблиці, по полю для якого створили індекс MySql (і будь-яка інша БД) знає, що у неї є індекс, яким пройтися буде швидше, ніж перебирати всі записи і Ваш запит буде направлений цьому індексу і запису , що задовольняють умові, будуть знайдені набагато швидше, тому що пошук по побудованому дереву буде набагато швидше, ніж простий перебір усіх записів.