Rails acts_as_audited - 为什么它首先按 ID 进行索引?

发布于 2024-10-15 19:48:19 字数 461 浏览 5 评论 0原文

使用 Rails 2.3.5。

在acts_as_audited中,模式定义定义了一个索引:

add_index:审计,[:auditable_id, :auditable_type], :name => 'auditable_index'

在我看来,索引应该是:

add_index:审计,[:auditable_type, :auditable_id], :名称 => 'auditable_index'

一般来说,在多态关联中,我们有时可能只想按类型进行搜索,但几乎不会在没有类型的情况下按 ID 进行搜索?

或者,当您仅使用插件审核一个表时,这是允许通过auditable_id进行搜索的一种懒惰方式吗?

或者还有其他原因以这种方式进行索引吗?

Using Rails 2.3.5.

In acts_as_audited, the schema definition defines an index:

add_index :audits, [:auditable_id,
:auditable_type], :name =>
'auditable_index'

It seems to me that the index should be:

add_index :audits, [:auditable_type,
:auditable_id], :name =>
'auditable_index'

In general, in a polymorphic association, we might sometimes want to search by the type only, but hardly ever search by the ID without the type?

Or is this a lazy way to allow a search by auditable_id when you are only using the plugin to audit one table?

Or is there another reason to do the indexing this way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

忘羡 2024-10-22 19:48:19

我刚刚想到了答案。

有些数据库不支持多字段索引,这些数据库只会索引第一个字段。如果您使用我的替代索引,那么您将获得按类名聚集的数据,数据库必须在这些数据上执行顺序扫描才能找到特定的 ID。这肯定比搜索 ID 然后检查类名要慢。

我发现的另一个原因是,显然,当索引中的第一个字段不够具体时,SQL 优化器往往不会考虑使用索引。

The answer just occurred to me.

Some databases don't support multi-field indexing,and those databases will index only the first field. If you go with my alternate indexing, then you'd get data clustered by class name, on which the database will have to do a sequential scan to find a particular ID. That's bound to be slower than searching for IDs and then checking the class name.

Another reason, I've found, is that SQL optimizers tend to not figure out to use an index when the first field in the index is not specific enough, apparently.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文