У мене є таблиця MySQL 3 цілих полів. Жодне з полів не має унікального значення, але три з них є унікальними.
Коли я запитую цю таблицю, я шукаю лише за першим полем.
Який підхід рекомендується для індексування такої таблиці? Маючи первинний ключ з декількома полями на трьох полях або встановлюючи індекс на першому полі, який не є унікальним?
Дякую, Бар Doori
Відповіді:
2 для відповіді № 1Обидва. Для забезпечення унікальності вам потрібен первинний ключ з декількома полями, і ви бажаєте, щоб індекс на першому полі був швидкістю під час пошуку.
0 для відповіді № 2
Ви можете мати UNIQUE Constraint
на трьох полях у поєднанні з вашими стандартами якості даних. Якщо ви в першу чергу здійснюєте пошук за полем Field1, ви повинні мати індекс на ньому.
Ви також повинні розглянути, як ви JOIN
цієї таблиці.
Ваші індекси повинні в першу чергу підтримувати більшу навантаження - вам доведеться дивитися на план виконання, щоб визначити, що вам найбільше подобається.
0 для відповіді № 3
Первинний ключ запобігає випадковому вставленню прикладних рядків. Ви, напевно, цього захочете.
Хоча ви можете правильно замовити стовпці в PK або зробити індекс на першому стовпці кластерним для кращої ефективності. Порівняйте, як виконується запит (з наявним ПК) і з індексом і без нього в першому стовпці.
0 для відповіді № 4
Якщо ви використовуєте InnoDB, ви повинні мати кластеріндекс. Якщо ви не вкажете, MySQL так чи інакше буде використовувати один у фоновому режимі. Таким чином, ви можете також використовувати кластерний (унікальний) первинний ключ, поєднуючи всі три колонки.
Первинний ключ також запобігає дублювання, що є бонусом.
Якщо ви повертаєте всі три цілі поля,тоді ви будете мати покритий індекс, що означає, що база даних навіть не доведеться торкатися фактичного запису. Він отримає все, що потрібно, безпосередньо з індексу.
Єдиним застереженням були б вставки (і додає). Оновлення кластерного індексу, особливо на кількох стовпцях, має певну ефективність. Вам доведеться перевірити і визначити найкращий підхід.