2011-02-04 46 views
0

使用Rails 2.3.5。Rails acts_as_audited - 爲什麼它先通過ID索引?

在acts_as_audited,模式定義定義了一個索引:

add_index:審計,[:auditable_id, :auditable_type]:名稱=> 'auditable_index'

這似乎我該索引應該是:

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

一般來說,在一個多態關聯,我們有時可能希望只通過類型進行搜索,但很少由ID沒有類型搜索?

或者,當您僅使用插件審計一個表時,是否允許通過auditable_id進行搜索這種懶惰的方式?

或者還有另一個這樣做索引的原因嗎?

回答

0

答案剛剛發生在我身上。

某些數據庫不支持多字段索引,並且這些數據庫僅索引第一個字段。如果你使用我的備用索引,那麼你會得到數據按類名稱聚集,數據庫將不得不依靠順序掃描來找到一個特定的ID。這肯定比搜索ID然後檢查類名慢。

我發現,另一個原因是SQL優化器在索引中的第一個字段不夠明確時傾向於不使用索引。