Внешние ключи и индексы - PullRequest
3 голосов
/ 18 января 2012

У меня есть 2 таблицы: продукты и категории .В каждой категории есть много товаров, и товар может принадлежать ко многим категориям.

товаров

product_id - int primary auto increment
name - unique
etc.

категорий

category_id - int primary auto increment
name - unique
etc.

У меня есть третья таблица для многих отношений.

products_categories

product_id -> foreign key: products.product_id
category_id -> foreign key: category.category_id

У меня вопрос: нужно ли создавать индексы для product_id и category_idв product_categories для более быстрого выбора запросов, и если да, то какие индексы?

Спасибо

Ответы [ 2 ]

2 голосов
/ 18 января 2012

Это зависит от того, какие запросы будут наиболее частыми.

Вы можете получить три индекса.

  1. Если у вас есть ... WHERE products_categories.product_id = XXX, создайте индексproduct_id.

  2. То же самое для category_id

  3. Создать индекс для category_id и product_id если у вас есть ... WHERE products_categories.category_id = XXX AND products_categories.product_id = YYY

Однако, в соответствии с руководством по MySQL , имейте в виду, что индекс на (category_id, product_id) может быть избыточным с индексом на(category_id).Кроме того, индекс на (product_id, category_id) может быть избыточным с индексом на (product_id).Таким образом, вы можете в итоге получить два индекса (вместо трех), охватывающих все ваши частые запросы.

1 голос
/ 18 января 2012

Вам определенно следует создать индексы, поскольку ограничение FOREIGN KEY ничего не говорит о поле источника для ограничения, поэтому оно не создает автоматически индекс.

Для вопроса "какой индекс" вы, конечно, не хотите иметь уникальный индекс - и я бы придерживался индекса по умолчанию, который является BTREE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...