Нужна ли индексация по одному столбцу, если есть составная индексация в рельсах? - PullRequest
0 голосов
/ 06 июня 2018

Я создал таблицу в рельсах с PostgreSQL, это таблица соединения между аккаунтом и программой, какой лучший способ добавить индекс?Нужен ли единый индекс index: true для каждой ссылки, когда у меня есть оба порядка составной индексации?

create_table :custom_library_programs do |t|
  t.references :account, index: true, foreign_key: true
  t.references :program, index: true, foreign_key: true
  t.boolean :submitted, default: false

  t.timestamps null: false

  t.index [:account_id, :program_id]
  t.index [:program_id, :account_id]
end 

1 Ответ

0 голосов
/ 06 июня 2018

Нет, ваша индексация покроет вас.Составная индексация работает так, что она будет использоваться только последовательно в том порядке, в котором столбцы были определены вашим индексом.Например, ваш первый индекс:

t.index [:account_id, :program_id] ##Speeds up queries for accounts or 'accounts & programs'

будет работать так же, как

t.index :account_id ##Speeds up queries for accounts

, если вы только просматриваете учетные записи.Это, однако, не ускорит запросы, просто ищущие программы (будут ускорены только запросы для «учетных записей и программ»), но так как вы создали составной индекс в обратном направлении (t.index [:program_id, :account_id]), вы также будете иметь быстрый поиск в обоих направлениях..

...