У мене є таблиця, яка містить лише два поля, id1 та i2.
Обидва є ідентифікаторами інших таблиць і є int (10).
Чи повинен я мати індекс на цій таблиці?
Редагувати: Я думаю, що ця таблиця складається з двох простих типів даних ... Чи буде MySQL запитувати неіндексовані дані менш ефективно, ніж індексовані дані?
У таблиці, про яку йде мова, буде більше зчитувань, ніж записів, і їх не запитують дуже часто, тому індекс було б добре мати.
Відповіді:
0 для відповіді № 1Якщо це велика таблиця (тобто, що складається з безлічі рядків) індексом стовпців, які будуть використовуватись як частина запиту, може бути хорошою ідеєю. Крім того, якщо таблиця буде оновлюватися дуже рідко і використовується дуже часто як таблиця релятора, один або більше індексів можуть значно прискорити приєднання, що включають таблицю.
Те, що два стовпці таблиці стосуються первинних ключів, не усуває потреби в індексі. Розглянемо загальний сценарій з'єднання, що включає таблицю релятора, наприклад:
Таблиця1 ПРИЄДНАЙТЕСЬ РеляторТаблиця Приєднуйся до таблиці2
Може бути хорошою ідеєю створити індекс для RelatorTable на зовнішньому ключі в тій таблиці, яка посилається на первинний ключ таблиці1. Це може прискорити приєднання, особливо якщо RelatorTable великий.
-2 для відповіді № 2
Індекс у базах даних SQL дуже схожий на ті, що виЯкщо у книжках замість того, щоб переглядати вміст книги, щоб знайти все, що ви шукаєте, скоріше скористайтеся індексом, а потім перейдіть до точної сторінки. Але у вашому випадку ваша таблиця не містить даних, а лише посилання на дані, що зберігаються в інших таблицях, тому я особисто не відчуваю необхідності в цьому індексі. Поля поля id просто можуть функціонувати як індекси в цьому випадку .