作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Rails 应用程序中使用 validates_overlap gem ( https://github.com/robinbortlik/validates_overlap )。这是模型代码:
validates :start_time, :end_time, overlap: { scope: "device_id", exclude_edges: ["start_time", "end_time"] }
这是它触发的 SQL:
SELECT 1 AS one FROM "bookings" WHERE
((bookings.end_time IS NULL OR bookings.end_time > '2014-04-11 13:00:00.000000') AND
(bookings.start_time IS NULL OR bookings.start_time < '2014-04-11 16:00:00.000000') AND
bookings.device_id = 20) LIMIT 1
我只是想知道我是否应该在我的 postgres 数据库中添加一个涵盖 start_time、end_time 和 device_id 或类似内容的索引?例如像这样:
add_index :bookings, [:device_id, :start_time, :end_time], unique: true
最佳答案
添加上述索引以确保数据库一致性是没有意义的。毕竟您正在验证范围并排除实际边缘(唯一索引将准确检查边缘!)。
添加一个非唯一索引来加速验证是个好主意。如果是这样,您应该分析您的数据和应用程序查询。最简单的方法是简单地为每一列添加一个索引。 Postgres 仍然可以将它们用于多列查询(参见 heroku devcenter )。仅当它真的很重要(或者您不查询其他组合中的列)时才需要多列索引。如果是这样,device_id 应该在索引 Rule of thumb: index for equality first—then for ranges 中排在第一位。 .
关于ruby-on-rails - Rails + validates_overlap gem : When to add indexes to the database?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23009837/
我在 Rails 应用程序中使用 validates_overlap gem ( https://github.com/robinbortlik/validates_overlap )。这是模型代码:
我是一名优秀的程序员,十分优秀!