В таком типичном расположении, как многие ...
Movies Actors Movies_Actors
------ ------ -------------
movie_ID actor_ID FK_movie_ID
title name FK_actor_ID
... как индексировать таблицу ассоциации ('Movies_Actors'
) для оптимальной скорости чтения?
Обычно я вижу, что это делается только с помощью составного первичного ключа в таблице ассоциации, например:
CREATE TABLE Movies_Actors (
FK_movie_ID INTEGER,
FK_actor_ID INTEGER,
PRIMARY KEY (FK_movie_ID, FK_actor_ID)
)
Однако похоже, что индекс будет полезен только при поиске и movie_ID
, и actor_ID
(хотя я не уверен, работает ли составной индекс для отдельных столбцов) .
Поскольку «какие актеры в фильме X» и «в каких фильмах снялся актер Y» будут общими запросами для этой таблицы, похоже, что для быстрого поиска актеров и фильмов в каждом столбце должен быть отдельный индекс самостоятельно. Эффективно ли это делает составной индекс? Если нет, то составной индекс в этой таблице кажется бессмысленным. А если составной индекс не имеет смысла, что делать с первичным ключом? Ключ-кандидат, очевидно, является составной частью двух столбцов, но если полученный составной индекс является бессмысленным (не должно быть?), Это кажется пустой тратой.
Кроме того, эта ссылка добавляет некоторую путаницу и указывает на то, что было бы даже полезно указать два составных индекса ... один из них как (FK_movie_ID, FK_actor_ID)
, а другой в обратном порядке, как (FK_actor_ID, FK_movie_ID)
, с выбором которого является первичным ключом (и, следовательно, обычно кластеризованным) и который является «просто» уникальным составным индексом, основанным на том, какое направление запрашивается больше.
Какая настоящая история? Эффективно ли составной индекс автоматически индексирует каждый столбец для поиска по одному или другому? Должна ли таблица оптимальных (по скорости чтения, а не по размеру) иметь составной индекс в каждом направлении и по одному на каждый столбец? Что такое закулисные механики?
РЕДАКТИРОВАТЬ: Я нашел этот связанный вопрос, который по какой-то причине я не нашел перед публикацией ...
Как правильно индексировать таблицу ссылок для соединения многие-ко-многим в MySQL?