我有一個Rails ActiveRecord查詢,可以查找名稱是某個標記的所有記錄。第二次獲取一個Rails記錄計數
records = Market.where("lower(name) = ?", name.downcase);
rec = records.first;
count = records.count;
服務器顯示爲.first
和.count
來電均命中數據庫。
←[1m←[35mCACHE (0.0ms)←[0m SELECT "markets".* FROM "markets" WHERE (lower(nam
e) = 'my market') LIMIT 1
←[1m←[36mCACHE (0.0ms)←[0m ←[1mSELECT COUNT(*) FROM "markets" WHERE (lower(na
me) = 'my market')←[0m
爲什麼在數據庫可以使用已經查詢的結果時獲取計數?
我很關心未來的表現。今天有1000條記錄。當該表擁有800萬行時,對數據執行兩個查詢,並對count進行一個查詢,這將是昂貴的。
如何從集合中獲取計數,而不是數據庫?
正確。更多的說明 - > http://rhnh.net/2007/09/26/counting-activerecord-associations-count-size-or-length –
更新Rails 5.更改records.count records.size仍然導致額外的數據庫查詢。但將其更改爲records.length沒有,所以請嘗試records.length。在最後加入.all並沒有對查詢結果產生任何影響。 –
t.length也導致數據庫查詢(我使用Rails 5) – Kaz