2010-08-05 24 views
9

Tôi đang tìm cách chuẩn một vài yêu cầu ActiveRecord trong ứng dụng của mình. cách đơn giản nhất trong giao diện điều khiển để chuẩn cái gì đó nhưĐường ray định chuẩn ActiveRecord Queries

User.find_by_name("Joe").id 

so

User.find(:first, :select => :id, :conditions => ["name = ?","Joe"]).id 

Cảm ơn

Trả lời

1

Sử dụng kịch bản/hiệu suất/benchmarker:

script/performance/benchmarker 2000 "User.find_by_name('Joe').id" "User.first(:conditions => {:name => 'Joe'}, :select => 'id').id" 

Trên máy dev của tôi, điều này báo cáo:

  user  system  total  real 
#1  1.110000 0.070000 1.180000 ( 1.500366) 
#2  0.800000 0.050000 0.850000 ( 1.078444) 

Như vậy, phương pháp thứ 2 dường như nhanh hơn, vì nó có ít việc phải làm hơn. Tất nhiên, bạn nên đánh giá điều này trên máy sản xuất của mình, sử dụng môi trường sản xuất:

RAILS_ENV=production script/performance/benchmarker 2000 "User.find_by_name('Joe').id" "User.first(:conditions => {:name => 'Joe'}, :select => 'id').id" 

Điều này có thể thay đổi một số điều kiện cho bạn.

+0

Vì '3.0' nó sẽ là' chuẩn đo lường đường ray ... ' – jibiel

4

Trong chế độ phát triển của mỗi truy vấn này được hẹn giờ và đăng nhập log/development.log là gì. Bạn sẽ có những dòng như:

Ad Load (1.4ms) SELECT "ads".* FROM "ads" ORDER BY created_at DESC 
+3

Điều đó báo cáo thời gian truy vấn thực tế trên phần máy chủ cơ sở dữ liệu. Nó không đo ORM làm việc, như tạo ra bó của các đối tượng cho mỗi bản ghi. –

28

Câu hỏi này hơi cũ và cần câu trả lời cập nhật. Cách dễ nhất để đánh giá truy vấn bên ngoài một kịch bản sản xuất là chạy nó trong rails console (tập lệnh chuẩn không nằm trong Rails nữa.) Sau đó, bạn có thể chỉ cần thử nghiệm bằng cách sử dụng lớp Benchmark được tích hợp sẵn trong Ruby. Chạy những điều sau đây trong Rails:

puts Benchmark.measure { User.find_by_name("Joe").id } 
puts Benchmark.measure { User.find(:first, :select => :id, :conditions => ["name = ?","Joe"]).id } 

Tôi sẽ chạy trên 5 lần, loại bỏ min và max và lấy chi phí trung bình của ba lần còn lại để tìm ra truy vấn nào mang lại hiệu suất tốt hơn .

Đây là giải pháp chính xác nhất để nhận được chi phí thực tế chi phí của truy vấn từ Rails doesn't show you the cost to actually construct your objects. Vì vậy, trong khi @Slobodan Kovacevic câu trả lời là chính xác trong đó nhật ký hiển thị cho bạn cách nhật ký truy vấn, thời gian dài không cung cấp cho bạn thời gian xây dựng đối tượng có thể ít hơn cho truy vấn thứ hai của bạn vì bạn chỉ điền một trường duy nhất so với tất cả các trường người dùng .

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