Mongo索引用于查询

时间:2017-04-12 13:40:06

标签: mongodb

我有一个包含数百万条记录的集合。我试图在一个名为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"
}

1 个答案:

答案 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