2013-06-03 103 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

Rails版本4.2.7實際上。通過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 = ... by itunes_release_date'。 –