美文网首页
MongoDB 创建索引以支持查询

MongoDB 创建索引以支持查询

作者: Robin92 | 来源:发表于2019-12-08 15:36 被阅读0次

    翻译自 官方文档 create-indexes-to-support-queries

    创建索引支持你的查询

    当索引(index)包含所有查询(query)包含的字段时,索引就支持这个查询。这个查询会扫描这个索引而不是集合。创建支持查询的索引可以极大地增长查询性能。这篇文章描述了创建支持查询的索引的策略。

    创建单键索引(Single-Key Index)

    如果你只用某集合的一个 key 来做查询,那么你需要为这个集合创建一个仅有一个 key 的索引。例如,你可能在 product 集合的 category 上创建一个索引:

    db.products.createIndex( { "category": 1 } )
    

    创建复合索引(compound index)

    如果你有时查询时不仅仅用一个 key,有时还联合第二个 key,那么,创建一个复合索引比创建一个单键索引更有效率。这两种查询,MongoDB 都可以用一个复合索引。例如,你可能在 categoryitem 上创建一个索引。

    db.products.createIndex( { "category": 1, "item": 1 } )
    

    这个索引给了你两个选择。你可以仅仅用 category 查询,同样也可以用 category 联合 item 查询。一个在多个字段上的复合索引,只要查询字段是索引字段的“前缀”子集字段,这个索引就可以支持所有的这类查询。

    例如,一个集合上有索引 { x: 1, y: 1, z: 1 },可以支持查询以下索引命中的所有查询: { x: 1 }{ x: 1, y: 1 }

    这里有一些前缀的索引可能提供了更好性能的场景,例如 z 是一个大的数组 时,索引 { x: 1, y: 1, z: 1 } 也可以支持很多能用到索引 { x: 1, z: 1 } 的查询。

    但是, { x: 1, z: 1 } 有一个其他的使用。当 query 为 db.collection.find( { x: 5 } ).sort( { z: 1} ) 时,索引 { x: 1, z: 1 } 即支持查询也支持排序操作,但 { x: 1 , y: 1, z: 1 } 只支持查询。

    更多信息请看 Use Indexes to Sort Query Results译文参考

    从 MongoDB 2.6 版本开始,MongoDB 可以用 交叉索引(index intersection译文参考)来满足查询。是选用复合索引还是依赖于你的系统使用用交叉索引以满足你的查询,见 Index Intersection and Compound Indexes


    相关文章

      网友评论

          本文标题:MongoDB 创建索引以支持查询

          本文链接:https://www.haomeiwen.com/subject/mwumgctx.html