Tình huống:Tìm kiếm theo thẻ hiệu quả như thế nào?
Tôi có 1 triệu người dùng và tôi muốn tìm kiếm chúng theo thẻ.
Dưới đây là sơ đồ:
const Account = new Schema({
tags: { type: [String], default: ['cats'] }
})
Dưới đây là các truy vấn đầu tiên:
const query = { tags: 'cats'}
const fields = { _id: 0 }
const options = { skip: 0, limit: 5 }
Account.find(query, fields, options)
Sau khi gọi find
phương pháp Mongoose
sẽ bắt đầu tìm kiếm và trả lại 5 mục đầu tiên nó phù hợp. Hiệu suất trong trường hợp này là tối ưu.
Dưới đây là các truy vấn thứ hai:
const query = { tags: 'cats'}
const fields = { _id: 0 }
const options = { skip: 500 000, limit: 5 }
Account.find(query, fields, options)
gì xảy ra trong trường hợp này là quan tâm đến tôi.
Có Mongoose
khớp 500 000 mục trước và sau đó trả lại 5 mục tiếp theo?
Hoặc thực hiện bằng cách nào đó 'nhảy' đến phần 500 000 mà không cần phải khớp tất cả trước đó?
Tôi đang cố gắng hiểu mức độ hiệu quả của việc áp dụng này và liệu tôi có thể cải thiện nó bằng cách nào đó hay không. Cho tôi vài lời khuyên được không?
tìm hoạt động tương tự như "select", vì vậy nó đầu tiên của tất cả các trận đấu 500.000 mục và sau đó bỏ qua nó để rõ ràng hiệu suất khôn ngoan của nó không tốt. Bạn nên tìm kiếm về kỹ thuật lập chỉ mục hoặc sắp xếp dữ liệu hiệu quả trước tiên. –