过去几天我一直在做一些关于索引的大量阅读,我试图找出正确的方法来索引我有很多限制的查询。我正在使用postgres_ext gem来支持数组数据类型以及 GIN 和 GIST 索引类型。
我有两个疑问
.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 会在第一个查询中使用这两个多列索引吗?
数组数据类型是否应该始终采用“gin”索引类型?或者你也可以把它们放在 b-tree 索引中吗?
最后,第一个索引是否会在两个查询中用于“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