Как правильно указать индекс нескольких столбцов в Rails
как показано в этом вопросе:
как сделать столбец уникальным и индексировать его в миграции Ruby on Rails?
Вы можете написать:
add_index :the_table, [:foo_column, :bar_column], unique: true
чтобы добавить индекс нескольких столбцов.
Но по-прежнему ли необходимо добавлять одиночные индексы для каждого из тех столбцов, которые вы уже указали многоколоночный индекс?
Я имею в виду что-то вроде пишу ниже код на код, приведенный выше.
add_index :the_table, :foo_column
add_index :the_table, :bar_column
2 ответов
Для MySQL :
MySQL сможет использовать индекс [: foo_column,: bar_column] для запроса условий для обоих столбцов, а также для условий только для левого столбца, но не для правого столбца.
подробнее здесь : http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html
Так что вы должны сделать
add_index :the_table, [:foo_column, :bar_column], :unique => true
add_index :the_table, :bar_column
чтобы убедиться, что вы индексируете все правильно
MySQL индексирует столбцы слева направо так если у вас есть многоколоночный индекс, как это:[:col1, :col2, :col3, :col4]
, вы можете запросить этот показатель на :
- столбец col1
- столбец col1 + столбец col2
- столбец col1 + столбец col2 + кол3
- столбец col1 + столбец col2 + кол3 + col4
таким образом, вы можете запросить левой колонки
Если вам нужно что-нибудь еще, вам придется создать больше индексов
опять же, это только для MySQL, postgres может работать по-другому
Для PostgreSQL:
PostgreSQL: Документация: Многоколоночные Индексы говорит:
многоколоночный индекс B-дерева можно использовать с условия запроса задействовать любое подмножество столбцов индекса, но индекс больше всего эффективен, когда есть ограничения на ведущем (крайнем левом) столбцы. точное правило заключается в том, что ограничения равенства на ведущих столбцы, плюс любые ограничения неравенства в первом столбце, которые делает не имеют ограничения равенства, будет использоваться для ограничения части индекс, который сканируется. Ограничения на столбцы справа от эти столбцы проверяются в индексе, поэтому они сохраняют посещения таблица правильная, но они не уменьшают часть индекса, который имеет для сканирования.
похоже, что PostgreSQL ведет себя так же, как MySQL в этой области.