【发布时间】:2011-09-25 04:50:11
【问题描述】:
我的编程环境是 Rails 2.3 和 PostgreSQL 8(Heroku 上的共享数据库): 我读过这个 http://devcenter.heroku.com/articles/postgresql-indexes#multicolumn_indexes 以及在我开始以通用方式构建我的应用程序之前互联网上的其他相关资源:
我的表有两列 A 和 B 并且都被索引。 (就(A,B)对而言,这些行是唯一的) 但是在我构建了我的应用程序之后,我发现我只使用两种类型的调用来查询表: myTable.find_by_A_and_B(a,b) 和 myTable.find_by_A(a)
我们预计表中有 10000 多个条目,不同 A 和不同 B 的比率约为 3:1。我们预计,对于 A 中的每个唯一值,B 中将有超过 1000 多行具有不同的值;对于 B 中的每个唯一值,在 A 中具有不同值的行不会超过 300 行。
我的问题是:就 myTable.find_by_A_and_B(a,b) 调用而言,当前的数据库设置(具有两个单独的索引)是否可以归类为“高效”(因为我不知道 PostgreSQL 的内部工作)。以及仅用 (A,B) 的一个多列索引替换这两个索引是否会显着提高速度?
谢谢。
附:作为对评论的回应,这里有更多信息: 根据这个页面,http://devcenter.heroku.com/articles/database 它正在运行 PostgreSQL 8.3
以下是 myTable 的迁移架构:
create_table :myTable do |t|
t.string :b
t.integer:a
t.boolean :c, :default => false
end
add_index :mytable, :b
add_index :mytable, :a
【问题讨论】:
-
如果您在 postgres 上提供准确的版本号,我们会更容易。 8.2和8.4有很大区别。此外,像往常一样,表定义会很有帮助。答案取决于
a和b的数据类型。最后,了解一下您的实际查询会让您更轻松。 -
感谢您的澄清 - 作为回报,我编辑了我的答案。
标签: ruby-on-rails postgresql indexing multiple-columns