2013-09-18 2 views
0

У меня есть запрос SELECT.. WHERE user_id='' && date>:expire && used=0;Настройка столбцов Mysql Индекс группы или отдельные

Когда я пытаюсь создать индекс. я должен создать все вместе в одном запросе, таком как

CREATE INDEX new_index ON table (user_id, date, used) 

или следует отделить их и создать индекс для каждого столбца?

ответ

1

Это действительно зависит от того, как вы планируете запрос этих столбцов. Ваша самая безопасная ставка будет просто делать индексы для каждого столбца, хотя это может не дать оптимальной производительности.

индексов Multi-колонки полезны в тех случаях, когда:

  • Вы должны применять ограничение уникальности через комбинацию столбца значений
  • Вы знаете, что вы всегда будете использует столбцы для соединений, где положения, заказ на, группы по т.д. в определенной комбинации

Например, для индекса комбо вы предложили (user_id, дата, используется) вы могли бы использовать индекс только в следующих условиях:

  • Вы делаете соединение, где и т.д. только на user_id
  • Вы делаете присоединиться, где и т.д. на user_id и дате
  • Вы делаете присоединиться, где и т.д. на всех трех столбцах

Вы не могли бы использовать индекс для этих случаев

  • Вы делаете присоединиться, где и т.д. на дату или использовать по отдельности
  • Вы делаете присоединиться, где и т.д. на сегодняшний день и используется

Для дальнейшего чтения, здесь MySQL документации по индексам несколько колонок:

http://dev.mysql.com/doc/refman/5.5/en/multiple-column-indexes.html

0

На основании вашего запроса, должен использовать индекс с несколькими столбцами. Тем не менее, право индекс:

CREATE INDEX new_index ON table (user_id, used, date) 

Обратите внимание, что date является последним в индексе, потому что у вас есть неравенство.

В MySQL очень хорошо обсуждается here о многоколоночных индексах и о том, как они используются.

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