我有一个包含数百万条记录的集合。我试图在一个名为term的字段上实现自动完成,我将其分解为一组称为单词的单词。我的查询非常慢,因为我遗漏了与索引相关的内容。有人可以帮忙吗?
我有以下查询:
db.vx.find({
semantic: "product",
concept: true,
active: true,
$and: [ { words: { $regex: "^doxycycl.*" } } ]
}).sort({ length: 1 }).limit(100).explain()
解释输出说没有使用索引,即使我有以下索引:
{
"v" : 1,
"key" : {
"words" : 1,
"active" : 1,
"concept" : 1,
"semantic" : 1
},
"name" : "words_1_active_1_concept_1_semantic_1",
"ns" : "mydatabase.vx"
}
答案 0 :(得分:1)
您可以使用mongo shell检查是否正确利用了复合索引
db.vx.find({YOURQUERY}).explain('executionStats')
并检查字段winningPlan.stage
:
COLLSCAN
表示索引部分使用或根本不使用。IXSCAN
表示在此查询中正确使用了索引。您还可以检查text search是否符合您的需求,因为它比$ regex运算符更快。 https://comsysto.com/blog-post/mongodb-full-text-search-vs-regular-expressions