MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB + Python - truy vấn đơn giản rất chậm

Bạn có chắc chắn rằng chỉ mục của bạn đã được tạo không? bạn có thể cung cấp đầu ra của getIndexes() không trong bộ sưu tập của bạn

ví dụ:db.my_collection.getIndexes()

và giải thích về truy vấn của bạn

db.my_collection.find({created_at_year: 2014, created_at_month: 1, created_at_day: 28 }).explain()

Tái bút:tất nhiên tôi phải đồng ý với @Aesthete về thực tế là bạn lưu trữ nhiều hơn mức bạn cần ...

Cập nhật ngày 29 tháng 1 năm 2014

Hoàn hảo! Như bạn thấy, bạn có bốn chỉ mục khác nhau khi bạn có thể tạo MỘT chỉ mục kết hợp sẽ bao gồm tất cả chúng.

xác định

db.my_collection.ensureIndex({created_at_year: 1, created_at_month: 1, created_at_day: 1, created_at_hour: 1 })

sẽ cung cấp cho bạn một chỉ mục chính xác hơn cho phép bạn truy vấn về:

  • year
  • yearmonth
  • yearmonthday
  • yearmonthdayhour

Điều này sẽ làm cho các truy vấn của bạn (với bốn khóa) nhanh hơn nhiều, bởi vì tất cả các tiêu chí của bạn sẽ được đáp ứng trong dữ liệu chỉ mục!

xin lưu ý rằng thứ tự của các khóa trong ensureIndex() rất quan trọng, thứ tự đó thực sự xác định danh sách các truy vấn được đề cập ở trên!

Cũng lưu ý rằng nếu tất cả những gì bạn cần là 4 trường này, hơn là nếu bạn chỉ định một phép chiếu chính xác, ví dụ:
db.my_collection.find({created_at_year: 2014, created_at_month: 1, created_at_day: 28}, { created_at_year: 1, created_at_month: 1, created_at_day: 1 })

thì chỉ có chỉ mục sẽ được sử dụng, đó là hiệu suất tối đa!



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách truy vấn khóa động - Thiết kế lược đồ mongodb

  2. Tìm sự khác biệt với các bộ sưu tập trong mongodb

  3. Khởi động PHP Không thể tải thư viện động php_mongo.dll

  4. Sắp xếp các bản ghi theo cách nào để chỉ các bản ghi phù hợp với id đứng trước?

  5. PyMongo $ inc đang gặp sự cố