Производительность Rails / Indexes Q - что быстрее? - PullRequest
0 голосов
/ 17 октября 2010

В таблице есть столбцы: 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 записей и постоянно растет!

Ответы [ 2 ]

1 голос
/ 17 октября 2010

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

Table.find_all_by_user_id(some_id)

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

add_index :table, :column

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

0 голосов
/ 18 октября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...