2009-12-21 25 views
8

Có cách nào để ngăn ActiveRecord phát hành một SHOW FIELDS tới cơ sở dữ liệu khi nó không cần thiết?Tránh SHOW FIELDS trong ActiveRecord

Tôi đang làm việc trên ứng dụng quan trọng về hiệu suất cơ sở dữ liệu và chỉ nhận thấy rằng trên truy vấn điển hình, SELECT của tôi mất 0,5 mili giây và SHOW FIELDS có liên quan mất 2 ms - 4 lần nữa! Thậm chí quan trọng hơn, nó không cần thiết bởi vì tôi đã xác định cột duy nhất tôi muốn lấy:

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

UsersAddress Load (0.5 ms) SELECT address_id TỪ users_addresses WHERE (. users_addressesuser_id = 1)

Cột UsersAddress (2.1ms) HIỂN THỊ LĨNH VỰC TỪ users_addresses

Cấp, điều này chỉ xảy ra một lần mỗi lần một số bảng được xúc động lần đầu tiên, nhưng không nên tránh được hoàn thành? Trước hết, thông tin đó đã có trong lược đồ của tôi. Thứ hai, tôi không cần nó.

Bất kỳ ý tưởng nào về cách tối ưu hóa điều này để Rails không chạy được SHOW FIELDS trừ khi nó thực sự cần đến nó?

Cảm ơn!

Trả lời

11

Ở chế độ sản xuất, nó sẽ chỉ tải một lần sau khi khởi động máy chủ (không phải mọi yêu cầu).

Trong chế độ phát triển nó được nạp trên mọi yêu cầu (vì nó là phương thức phát triển và nó khởi động lại hầu hết mọi thứ mọi yêu cầu)

Vì vậy, bạn không cần phải lo lắng về nó trong phương thức sản xuất.

+0

Cảm ơn. Tôi đoán tôi sẽ không lo lắng về nó sau đó. Làm cho tinh thần tại sao nó sẽ kiểm tra trong chế độ dev .. trong trường hợp tôi thay đổi mô hình của tôi. –

+2

Điều bạn nhận thấy là một phần của 'cache_classes = false'. – Eric

0

vẫn có liên quan để biết cách vô hiệu hóa ngay cả trong chế độ sản xuất. Đối với fcgi và mod-ray thời gian khởi động bị giảm.

+0

Nếu nó đã bị tắt hoàn toàn, ActiveRecord sẽ không hoạt động. Nó sẽ không có một cách để tìm ra những cột trên bàn của bạn. – cpm

Các vấn đề liên quan