2016-03-11 4 views
0

У меня есть следующая структура базы данных:Желаемая структура индекса в тузде таблице

  • идентификатор
  • имя
  • года
  • директор
  • выполнение

Пример вход является: (1, «Титаник», 1994, «Джеймс Кэмерон», 02:44:00)

Я хочу, чтобы найти соответствие любых три из четырех критериев, например:

1. name + year + director 
2. name + year + runtime 
3. year + director + runtime 

Если я создал один индекс, это будет достаточно для optimial запросов?

ALTER TABLE myTable ADD INDEX (name, year, director, runtime) 

Или, мне нужно создать индекс для каждой комбинации?

ALTER TABLE myTable ADD INDEX (name, year, director) 
ALTER TABLE myTable ADD INDEX (name, year, runtime) 
ALTER TABLE myTable ADD INDEX (year, director, runtime) 

Я бы предпочел использовать первый, но который будет предложен здесь? Почему один предпочтительнее другого? Это таблица InnoDB.

+0

Вы можете добавить полнотекстовый индекс на всех 4-х колонок и поиск с WHERE MATCH (все 4 колонки) ПРОТИВ (прописью) В булевой РЕЖИМЕ – Mihai

+0

@Mihai Я использую InnoDB. – David542

+0

На 5.6 или выше вы можете использовать FULLTEXT на innoDB – Mihai

ответ

1

Учитывая, что id является первичным ключом, имеющим уникальный индекс по умолчанию; если вы создадите один индекс с 4 столбцами, что было бы достаточным основанием, в этом случае то, что вы получаете, это Covering Index.

ALTER TABLE myTable ADD INDEX (name, year, director, runtime) 
+0

спасибо за объяснение, не могли бы вы объяснить, что такое «Индекс покрытия» и как это полезно? – David542

+1

Индекс покрытия относится к случаю, когда все поля, выбранные в запросе, покрываются индексом, в этом случае ** InnoDB ** (не MyISAM) никогда не будет считывать данные в таблице, а использовать данные только в индексе , значительно ускоряя выбор. – Reto

+1

@ David542, см. Этот поток SO http://stackoverflow.com/questions/8213235/mysql-covering-vs-composite-vs-column-index, а также документы MySQL http://dev.mysql.com/doc/ refman/5.0/en/multiple-column-indexes.html – Rahul

Смежные вопросы