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

Cách tăng tốc truy vấn mongo

Một số điều bạn có thể làm tại đây:

Trước hết, hãy sử dụng $ in thay vì $ hoặc.

Thứ hai, MongoDB có thể chỉ sử dụng một chỉ số cho trận đấu đầu tiên của bạn, vì vậy bạn sẽ phải quyết định (bằng cách dùng thử) trận đấu nào tốt hơn. Mục tiêu là có một truy vấn càng nhanh và càng ít tài liệu đi qua đường dẫn của bạn. Để có điều đó, bạn làm những việc sau:

Đầu tiên, tạo ba chỉ mục:

db.element.ensureIndex( { 'versions.branch' : 1 } );
db.element.ensureIndex( { 'doctype' : 1 } );
db.element.ensureIndex( { 'prefix' : 1 } );

Sau đó, chạy ba truy vấn sau và để ý các trường "con trỏ", "n", "nScanned" và "ms":

branch = "nameofbranch"; // guessing here
db.element.find( "versions.branch": branch ).explain();
db.element.find( "doctype" { $in: [ "15281", "15282" .... ] } ).explain();
db.element.find( "prefix": { $ne: "500" } ).explain();

Đối với truy vấn cuối cùng, bạn sẽ lưu ý rằng "con trỏ" là "BasicCursor", vì truy vấn $ ne không thể sử dụng chỉ mục.

Hai giá trị còn lại sẽ hiển thị cho bạn các giá trị khác nhau cho "ms", "n" và "nScanned". "ms" là thời gian cần thiết để chạy truy vấn. Nếu giá trị này gần giống nhau, thì hãy xem sự khác biệt giữa giá trị "n" và "nScanned". Tôi sẽ mong đợi và đoán rằng sự khác biệt cho truy vấn "version.branch" là 0. Đối với truy vấn "doctype" thì nó có thể khác. Nếu "ms" không gần giống nhau, hãy đặt $ so khớp nhanh nhất đầu tiên là mệnh đề $ match trong quy trình tổng hợp của bạn.

Nếu cả hai tốc độ ("ms") đều giống nhau, hãy kiểm tra các giá trị "n". Nếu "n" cho truy vấn "tiền tố" là "5" và "n" cho truy vấn "version.branch" là "500" thì điều đó có nghĩa là kết quả của truy vấn "tiền tố" tốt hơn, vì ít tài liệu được trả lại. Trong trường hợp đó, hãy tổng hợp điều đó làm điều khoản đối sánh $ đầu tiên của bạn. Nếu "phiên bản.branch" ít hơn nhiều, hãy sử dụng cái đó làm mệnh đề $ đối sánh đầu tiên.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách cài đặt MongoDB 4.2 trên hệ thống RedHat / CentOS 7

  2. đặt trường là trống cho đối tượng mongo bằng cách sử dụng mongoose

  3. sắp xếp theo độ dài chuỗi trong Mongodb / pymongo

  4. Parse.com thêm Đối tượng JSON vào Mảng JSON

  5. Mongodb không thể khởi động do quyền của WiredTiger.turtle