2009-12-21 53 views
8

有什麼辦法可以防止ActiveRecord在不需要時向數據庫發佈SHOW FIELDS?避免在ActiveRecord中顯示字段

我正在研究數據庫性能的關鍵應用程序,只是注意到,在典型的查詢中,我的SELECT需要0.5毫秒,相關的SHOW FIELDS需要2毫秒 - 4倍的時間!更重要的是,它不是必要的,因爲我已經指定唯一的專欄中,我要檢索:

UsersAddress.find(:all, :conditions => {:user_id => 1}, :select => :address_id)

UsersAddress負荷(0.5毫秒)SELECT ADDRESS_ID FROM users_addresses WHERE(users_addressesuser_id = 1)

UsersAddress列(2.1ms)SHOW FIELDS FROM users_addresses

當然,這只是每次發生一次有些表是第一次觸及,但不應該完全避免嗎?首先,該信息已經在我的模式中。其次,我不需要它。

任何想法如何優化,使Rails不會運行SHOW FIELDS,除非它確實需要它嗎?

謝謝!

回答

11

在生產模式下,它將在啓動服務器(而不是每個請求)後僅加載一次。

在發展模式是每個請求加載(因爲它是發展模式,它重新啓動幾乎所有的每個請求)

所以你不必擔心它的生產模式。

+0

感謝。我想我不會爲此擔心。有道理爲什麼它會檢查開發模式..萬一我改變了我的模型。 – 2009-12-24 09:52:57

+2

你注意到的是'cache_classes = false'的一部分。 – Eric 2012-01-06 03:50:11

0

即使在生產模式下,仍然需要知道如何禁用它。 對於fcgi和mod-rails,啓動時間縮短。

+0

如果它完全禁用,ActiveRecord將無法工作。它沒有辦法確定你的桌子上有什麼列。 – cpm 2011-01-25 15:16:08