Производительность Rails / Indexes Q - что быстрее?

0

Таблица имеет столбцы: 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 записей и неуклонно растет!

Теги:
indexing

2 ответа

0
Лучший ответ

Table.find_all_by... не имеет ничего общего с индексами. Они добавляются рельсами независимо от того, является ли столбец внешним ключом или проиндексирован. Если вы хотите, чтобы эти столбцы были проиндексированы базой данных, вам нужно будет добавить их вручную с помощью add_index при миграции.

Ваши примеры делают две совершенно разные вещи. Один раз обнаруживает один столбец, другой находит два столбца, и они будут возвращать разные результаты.

Если вы хотите узнать, что быстрее, вам нужно будет провести бенчмаркинг. Я рекомендую прочитать руководство по направляющим для этого. http://guides.rubyonrails.org/performance_testing.html

1

Индекс зависит от запроса, который необходимо выполнить. Следующий код

Table.find_all_by_user_id(some_id)

не добавляет никакого индекса. Следующее делает

add_index :table, :column

Итак, если вам нужно выполнить запросы, используя как user_id, так и season_id, добавьте составной индекс. В противном случае добавьте простой индекс.

  • 0
    Вы меня неправильно поняли :) Проверьте мои правки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню