Таблица имеет столбцы: user_id
и season_id
Что быстрее:
#If I have a database index on user_id
Table.find_all_by_user_id(some_id)
или
#If I have a database index on user_id and season_id
Table.find_all_by_user_id_and_season_id(some_id, another_id)
Является ли индекс с несколькими столбцами быстрее?
Например, записывает индекс с несколькими столбцами медленнее? Если это так, я могу использовать одноколоночный запрос.
PS. Таблица имеет около 1.000.000 записей и неуклонно растет!
Table.find_all_by...
не имеет ничего общего с индексами. Они добавляются рельсами независимо от того, является ли столбец внешним ключом или проиндексирован. Если вы хотите, чтобы эти столбцы были проиндексированы базой данных, вам нужно будет добавить их вручную с помощью add_index при миграции.
Ваши примеры делают две совершенно разные вещи. Один раз обнаруживает один столбец, другой находит два столбца, и они будут возвращать разные результаты.
Если вы хотите узнать, что быстрее, вам нужно будет провести бенчмаркинг. Я рекомендую прочитать руководство по направляющим для этого. http://guides.rubyonrails.org/performance_testing.html
Индекс зависит от запроса, который необходимо выполнить. Следующий код
Table.find_all_by_user_id(some_id)
не добавляет никакого индекса. Следующее делает
add_index :table, :column
Итак, если вам нужно выполнить запросы, используя как user_id
, так и season_id
, добавьте составной индекс. В противном случае добавьте простой индекс.