Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

MongoDB collection lớn tìm kiếm chậm? Cách khắc phục

Để tăng tốc tìm kiếm trên collection lớn, hãy tạo index (chỉ mục) phù hợp. Sử dụng createIndex(). Tạo collection với index trên ListOfName:

> db.demo661.createIndex({ListOfName:1});
{ "createdCollectionAutomatically" : true, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
> db.demo661.insertOne({_id:1,ListOfName:["John","Robert","David"]});
{ "acknowledged" : true, "insertedId" : 1 }
> db.demo661.insertOne({_id:2,ListOfName:["Mike","Sam"]});
{ "acknowledged" : true, "insertedId" : 2 }
> db.demo661.insertOne({_id:3,ListOfName:["John","David","Bob"]});
{ "acknowledged" : true, "insertedId" : 3 }

Hiển thị dữ liệu:

> db.demo661.find();

Kết quả:

Tìm tài liệu có ListOfName chứa CẢ "John" VÀ "David" (dùng $all):

> db.demo661.find({"ListOfName": {"$all":["John","David"]}});

Kết quả khớp _id 1 và 3:

Giải thích:

  • createIndex({ListOfName:1}) tạo **multikey index** - index mỗi phần tử trong mảng
  • $all dùng index này để tìm tài liệu chứa TẤT CẢ giá trị trong mảng điều kiện
  • Khác với $in (chỉ cần 1 giá trị khớp), $all yêu cầu TẤT CẢ giá trị đều có mặt

Khuyến nghị: Luôn chạy explain("executionStats") trước/sau khi tạo index để đo lường hiệu suất. Tránh tạo quá nhiều index không cần thiết (tốn RAM, chậm write).