2012-09-14 21 views
5

Tôi đang chạy truy vấn sau và mất trung bình 9 giây để trả lại kết quả. Không có bộ lọc nào trên đó, vì vậy tôi không chắc rằng chỉ mục sẽ giúp ích gì. Tại sao điều này chạy chậm như vậy? Chỉ có 250 đối tượng trong đó, và chỉ có 4 trường (tất cả văn bản).Tại sao collection.find ({}) mất hơn 9 giây cho 250 đối tượng (MongoMapper)

Country.collection.find({},:fields => ['country_name', 'country_code']).to_json 

"cursor":"BasicCursor", 
"nscanned":247, 
"nscannedObjects":247, 
"n":247, 
"millis":0, 
"nYields":0, 
"nChunkSkips":0, 
"isMultiKey":false, 
"indexOnly":false, 
"indexBounds":{}, 
"allPlans":[{"cursor":"BasicCursor","indexBounds":{}}] 

CPU, bộ nhớ và đĩa trên máy thậm chí không nhận thấy chạy truy vấn. Bất kỳ trợ giúp sẽ được đánh giá cao.

+3

bạn có thử chạy cùng một truy vấn trong trình bao mongo không? – soulcheck

+0

không, thành thật mà nói tôi không có nhiều kinh nghiệm trong trình bao mongo, tôi cần phải thay đổi cú pháp nào để nó xử lý nó như một truy vấn giống nhau? – ABrowne

+0

một cái gì đó như: 'db.countries.find ({}, {'country_name': 1, 'country_code': 1})' – soulcheck

Trả lời

3

Tạo chỉ số trên 'COUNTRY_NAME' FIELS sử dụng:

db.countries.ensureIndex({country_name:1}); 

Điều đó sẽ tăng tốc độ truy vấn của bạn vô cùng Bạn có thể tìm hiểu thêm về chỉ số here

PS- bạn có thể gõ 'nó' để hiển thị khi bạn thấy cụm từ 'có nhiều hơn' hoặc bạn có thể hiển thị tất cả kết quả mà không có 'có nhiều hơn' bằng cách sử dụng:

db.countries.find({}, {'country_name' : 1, 'country_code' : 1}).forEach(printjson) 

và bạn luôn có thể thiết lập các hồ sơ bằng:

>use databaseName; 
> db.setProfilingLevel(2); // 2 tell the profiler to catch everything happened inside the DB 

Bạn có thể tìm hiểu thêm về hồ sơ here

và bạn có thể hiển thị các dữ liệu bên trong các hồ sơ sử dụng

> db.system.profile.find() 

Phương pháp này sẽ cung cấp cho bạn có thêm thông tin về cơ sở dữ liệu của bạn và những gì đang xảy ra bên trong.

+3

Cảm ơn bạn, chạy db.countries.find ({}, {'country_name': 1, 'country_code': 1}) forEach (printjson) trong shell thực hiện và trả về tất cả các kết quả trong vòng mili giây, như tôi mong đợi mongo đến.Tôi sẽ cài đặt một hồ sơ lên ​​ngăn xếp ruby ​​của tôi là xem những gì đang gây ra một truy vấn mà nên thực hiện trong mili giây thực hiện trong vài giây. – ABrowne

+0

Hãy cho tôi biết nếu tạo chỉ mục tăng tốc truy vấn của bạn, đó là một tính năng tuyệt vời trong mongodb. – mongotop

+4

thật đáng buồn là không, nhưng hóa ra nó không phải là mongo, nhưng trình điều khiển ruby ​​và to_json đang làm chậm mọi thứ. Tôi đã kết thúc bộ nhớ đệm kết quả json nó hoạt động thực sự tốt. Bây giờ toàn bộ cuộc gọi ajax hoàn thành kết thúc để kết thúc trong phạm vi 70ms – ABrowne

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