2013-06-03 2 views
1

В Rails, как я могу добавить индекс при переходе в базу данных Postgres с определенным порядком сортировки?Добавить индекс с порядком сортировки?

В конечном счете хочет снять этот вопрос:

CREATE INDEX index_apps_kind_release_date_rating ON apps(kind, itunes_release_date DESC, rating_count DESC); 

Но сейчас в моей миграции у меня есть это:

add_index :apps, [:kind, 'itunes_release_date desc', 'rating_count desc'], name: 'index_apps_kind_release_date_rating' 

Какие выплевывает это:

CREATE INDEX "index_apps_kind_release_date_rating" ON "apps" ("kind", "itunes_release_date desc", "rating_count desc") 

какие ошибки :

PG::Error: ERROR: column "itunes_release_date desc" does not exist 
+0

Вы проверили [API здесь] (http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/ add_index)? Он имеет «создание индекса с порядком сортировки» – konyak

ответ

2

Похоже, что Rails не поддерживает упорядоченные индексы.

Я подозреваю, что вы можете смело удалить два desc, btw: kind находится в вашем предложении where, основанном на вашем предыдущем вопросе, поэтому PG должен с радостью посмотреть индекс в обратном порядке.

+0

Postgres может искать индекс в обратном порядке, но он немного медленнее. –

+0

Версия 4.2.7 Rails действительно. Посмотрите синтаксис для этого на странице https://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/add_index. Поиск ': desc' – fatuhoku

3

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

+0

Это не совсем так, если ORDER BY будет выглядеть как' kind asc, itunes_release_date desc'. Это действительно зависит от запроса. –

+0

@MarkusWinand: это правильно, но конкретный запрос OP соответствует сценарию, где это не имеет значения: 'where kind = ... order by itunes_release_date'. –

Смежные вопросы