2011-02-06 65 views
0

我們將在我們的網站上幾乎每一次「擊中」都做到這一點。在Heroku舉辦,運行Postgres。rails 3 ...在這種情況下,兩個查詢比一個更快嗎?

很常見的情況......我們模型中的單個方法獲取匹配條件的COUNT條記錄以及匹配相同條件的最後一條記錄。

在現實世界中的使用,COUNT通常小於20.表中有大約20個字段,沒有大於200個字符。

目前我做兩個查詢,N = widget.count(條件),然後我做Z = widget.last(條件)

但當然,我也可以做allfound =部件。找到(條件)然後得到n = allfound.count和z = allfound.last。

哪個更好?什麼是權衡? (有總是權衡,對不對?)

乾杯! JP

回答

1

我會用兩個查詢堅持,因爲:

  • 不要過早優化 - 直到你需要優化這一點,堅持你需要做的,也不是什麼(或者看起來是)最快什麼。
  • 如果表沒有改變,你的RDBMS可以緩存查詢/結果,所以查詢甚至不會觸及磁盤(在任何情況下)。
  • 最好緩存(例如memcached)這兩個單獨的值,以將其減少到零查詢,而不是在memcached中緩存整個表。
  • 即使由於往返數據庫的往返時間而導致一個查詢更快,那麼需要Rails實例化額外記錄(僅僅爲了讓您丟棄大部分記錄)的時間可能會補償做兩次的時間查詢。這就是說,有兩個疑問,Rails將不得不準備他們兩個,這也需要時間。

如果你真的想知道真正的答案,唯一確定的方法是基準測試。創建一個Rake任務,執行基準測試,然後在Heroku上運行它。

0

您是否檢查日誌?你確定Rails在第二種情況下不會做2個查詢嗎?

+0

我認爲他的意思是:如果他做了`.all`,然後`.size`和`.last`,那麼你可以將它作爲1個查詢。 – wuputah 2011-02-06 09:31:06

相關問題