ruby-on-rails - 如果在 Rails 中有复合索引,我是否需要单列索引?
问题描述
我用PostgreSQL在rails中创建了一个表,它是帐户和程序之间的连接表,添加索引的最佳方法是什么?index: true
当我有两个复合索引顺序时,是否需要为每个参考文献建立单一索引?
create_table :custom_library_programs do |t|
t.references :account, index: true, foreign_key: true
t.references :program, index: true, foreign_key: true
t.boolean :submitted, default: false
t.timestamps null: false
t.index [:account_id, :program_id]
t.index [:program_id, :account_id]
end
解决方案
不,您拥有的索引将涵盖您。复合索引的工作方式是它只会按照索引定义的列顺序顺序使用。例如你的第一个索引:
t.index [:account_id, :program_id] ##Speeds up queries for accounts or 'accounts & programs'
将与
t.index :account_id
##Speeds up queries for accounts
如果您只是查找帐户。但是,这不会加快单独查找程序的查询(只会加快对“帐户和程序”的查询),但是由于您以相反的方式 ( t.index [:program_id, :account_id]
) 创建了复合索引,因此您也可以在两个方向上进行快速查找。
推荐阅读
- java - 如何在 JAVA 中为具有泛型类型的可选项提供默认值
- java - 如何编写使用匿名内部类(如 PreparedStatementSetter)的类的 JUnit 测试?
- postgresql - 为什么 SELECT COUNT(DISTINCT) 中不使用索引?
- ruby - 我怎么能干这个while循环?
- javascript - 如何使用纯 js 向 DOM 插入和执行脚本标签
- google-analytics - iframe 和父页面都被 GA 跟踪
- android - 在 Android 上测量 OpenCl 使用的内存
- jupyter-notebook - 无法加载 jython 内核
- machine-learning - 用 gensim 的 fasttext 的 wrapper 训练词嵌入后,如何嵌入新句子?
- powershell - 更改 Windows Powershell 脚本标题