1
我很好奇rails如何查詢使用STI的表。例如,如果我的父類是Book
,我有兩個子類ComicBook
和Novel
如果我這樣做用STI查詢數據庫的效率
Novel.all.each
,因爲只有一個表,通過所有的漫畫書做服務器轉變呢?是否自動添加適當的索引來防止這種情況?謝謝
我很好奇rails如何查詢使用STI的表。例如,如果我的父類是Book
,我有兩個子類ComicBook
和Novel
如果我這樣做用STI查詢數據庫的效率
Novel.all.each
,因爲只有一個表,通過所有的漫畫書做服務器轉變呢?是否自動添加適當的索引來防止這種情況?謝謝
那麼,你不能這樣做Novel.each
,each
沒有在模型類上定義。但你可以做Novel.all.each ...
其中...
是一些塊。
至於查詢的工作方式,只需在任何ARel表達式上調用to_sql
即可。 Novel.all
將返回模型本身的集合,所以您需要進一步確保通過調用scoped
來返回有效的ARel表達式。
[1] pry(main)> Novel.scoped.to_sql
=> "SELECT \"books\".* FROM \"books\" WHERE \"books\".\"type\" IN ('Novel')"
通過頻繁查詢的大多數列進行索引是一件值得考慮的事情。是的,如果沒有索引,rdbms將不得不查看錶中的所有記錄,作爲上述條件檢查的一部分。
改變了我的錯誤,謝謝你的回答。 – Steve