ฉันแนะนำให้ใช้ฟังก์ชั่นขนาด
class Customer < ActiveRecord::Base
has_many :customer_activities
end
class CustomerActivity < ActiveRecord::Base
belongs_to :customer, counter_cache: true
end
พิจารณาสองรุ่นนี้ ลูกค้ามีกิจกรรมลูกค้ามากมาย
หากคุณใช้ a: counter_cache กับการเชื่อมโยง has_many ขนาดจะใช้การนับแคชโดยตรงและไม่ต้องสืบค้นเพิ่มเติม
ลองพิจารณาตัวอย่างหนึ่ง: ในฐานข้อมูลของฉันลูกค้ารายหนึ่งมีกิจกรรมลูกค้า 20,000 รายการและฉันพยายามนับจำนวนบันทึกกิจกรรมลูกค้าของลูกค้านั้นด้วยวิธีนับความยาวและขนาดแต่ละวิธี ที่นี่ด้านล่างรายงานมาตรฐานของวิธีการเหล่านี้ทั้งหมด
user system total real
Count: 0.000000 0.000000 0.000000 ( 0.006105)
Size: 0.010000 0.000000 0.010000 ( 0.003797)
Length: 0.030000 0.000000 0.030000 ( 0.026481)
ดังนั้นฉันพบว่าการใช้: counter_cache Size เป็นตัวเลือกที่ดีที่สุดในการคำนวณจำนวนเรคคอร์ด
size
ปรับให้เข้ากับสถานการณ์แล้วสิ่งที่จำเป็นต้องมีlength
และcount
ทั้งหมด?