我一直在做索引的最後幾天有些沉重的閱讀和我想以正確的方式找出該索引的查詢我有一個很大的制約。我正在使用postgres_ext gem來支持數組數據類型和GIN和GIST索引類型。PostgreSQL中複雜的索引類型和排序
我有兩個查詢
.where("a_id IN (?) and b = ? and active = ? and ? != ALL(c) and ? = ANY(d)")
.where("a_id =? and active =? and ? != ALL(c)")
c和d爲整型數組
我計劃的指標上增加:
add_index :deals, [:a, :b], :where => "active = true"
add_index :deals [:c, :d], :index_type => :gin, :where => "active = true"
將Postgres的在使用這兩個多列索引第一個查詢?
數組數據類型應該總是處於「杜松子酒」索引類型中嗎?或者你也可以把它們放在B樹索引中?
,最終將第一個索引被用於在這兩個查詢的「A」?
附加信息:
我使用PostgreSQL 9.1.3
create_table "table", :force => true do |t|
t.integer "a_id" ##foreign key
t.string "title"
t.text "description", :default => ""
t.boolean "active", :default => true
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "b",
t.integer "c", :limit => 8, :array => true
t.integer "d", :array => true
end
請顯示您的表定義或等效的Rails模型和PostgreSQL版本。 – 2013-03-09 00:33:43
增加了額外的信息@CraigRinger – 2013-03-09 00:56:57
Re數組和GIN,你可以有一個數組的b-tree索引,但對於像「array contains element」這樣的操作沒有用。你需要GIN,或者使用'intarray'擴展名和'GiST'索引類型來完成整數陣列,這將在寫入負載下表現更好,但在讀取負載下會更糟糕。 – 2013-03-09 01:21:00