Вам все-таки потрібна індексація після нормалізації бази даних


14

Після того, як ви провели хорошу нормалізацію, вам все-таки потрібно проіндексувати таблицю? Як це вплине на продуктивність? Чи це навіть вплине на ефективність якимось чином після гарної нормалізації?

Які стовпці зазвичай індексуються, якщо у вас вже є первинний і зовнішній ключ?

Схоже, це вже ефективно для нормалізації бази даних. Але я, можливо, пропустив, як індексація впливає на базу даних. Це ефективно лише тоді, коли використовуються запити? Як це працює / виконує та покращує базу даних?


5
Які стовпці зазвичай індексуються, якщо у вас вже є первинний і зовнішній ключ? Дати Імена. Все, що вам може знадобитися для пошуку чи сортування.
Carson63000

Індекс первинного ключа не враховується?
CodesInChaos

Відповіді:


34

Так. Насправді, вам дуже добре, можливо, доведеться приділяти більше уваги своїм індексам. Нормалізація стосується оптимального зберігання . Це часто суперечить швидкості пошуку , оскільки використовуються складніші запити зі складними з'єднаннями. Іноді люди, що підтримують бази даних, які вимагають високої швидкості пошуку, денормалізуються або упорядковують свої дані в дещо менш нормалізовані структури, щоб полегшити пошук.


21
Мета нормалізації - не ефективність зберігання, а швидше усунення залежностей від вставки, оновлення та видалення. Подальше читання

4
Я погоджуюся з @MichealT, що мова не йде про ефективність. Логічна послідовність - це те, що я вийшов із посилання.
JeffO

Я видалю суперечливе слово «ефективність» (хоча я думаю, що в основному підсумовує загальну мету нормалізації) і просто використаю натомість слово «оптимальний», залишаючи те, що це означає для читача. Дійсна мета нормалізації насправді не стосується того, чому індекси все ще потрібні після нормалізації бази даних.
GrandmasterB

56

Я думаю, ви неправильно зрозуміли, що робить індексація для продуктивності бази даних.

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

Оскільки вони займають додатковий простір та вартість (максимум) продуктивності для того, щоб вони були в курсі останніх, ви як дизайнер баз даних повинні створювати індекси, явно відповідні вашим програмам та моделям запитів.

Індекси є ортогональними для нормалізації бази даних.


4

Так, після нормалізації вам все ще потрібна індексація.

Таблиці, якими ви працюєте, приносять користь так само, як і таблиці, які ви мали до нормалізації. Насправді самі по собі вони просто такі самі: таблиці.

Однак ви повинні врахувати одне, що індекси допомагають швидше знайти свій шлях через свої дані. Нормалізація дизайну бази даних завжди хороша, але іноді з причини ефективності доводиться денормалізувати реалізацію. Але це лише в кожному конкретному випадку.


2

Так.

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

Існує лише один спосіб дізнатися, які індекси створити. Приймати всі запити в додатку, знайти репрезентативні приклади параметрів для них і є ядро бази даних показують свої плани запитів (всі бази даних система має EXPLAIN, EXPLAIN QUERY PLANабо аналогічну команду, вона називається по- різному в різних системах) і тест , як довго вони приймають. Чим створювати індекси, які прискорюють ті, що були повільними. І не забудьте знову скинути індекси, які ви намагалися, але не допомогли уникнути витрачання ресурсів.


1

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

Однак кожен індекс уповільнює вставки \ оновлення \ видалення, прискорюючи вибір, тому вибирайте ваші індекси ретельно.

Індекси мають вирішальне значення для прийнятної продуктивності бази даних.


0

Для третьої нормальної форми вам точно знадобляться індекси на всіх первинних ключах.

Чи потрібні вам інші індекси, залежить від того, як використовується ваша база даних. Наприклад, якщо ви регулярно шукаєте клієнтів у певному поштовому індексі, то, можливо, було б корисно проіндексувати стовпчик zip_code у таблиці клієнтів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.