• MongoDB索引(一)


    原文地址

    一、介绍

    我们已经很清楚索引会提高查询效率。如果没有索引,MongoDB必须对全部集合进行扫描,即,扫描集合中每条文档以选择那些符合查询条件的文档。对查询来说如果存在合适的索引,则MongoDB可以利用索引减少扫描的文档数。

    索引是一种特殊的数据结构,其中存储了集合的数据集的一小部分,以便容易遍历。索引本质上存储的其实是单个字段或者字段组的值,并根据字段值进行排序。索引的排序支持有效的相等比较和基于范围的查询操作。另外,MongoDB通过索引中的排序返回存储的结果。

    下图说明了一个查询并对匹配文档利用索引排序:

    Diagram of a query that uses an index to select and return sorted results. The index stores ``score`` values in ascending order. MongoDB can traverse the index in either ascending or descending order to return sorted results.

    MongoDB的索引通常与其他数据库系统中的索引类似。MongoDB在集合这一层定义索引,并对一个集合中的任何字段或者文档的子字段支持索引操作。

    注:MongoDB索引使用B树数据结构

    索引类型

    MongoDB提供一系列不同的索引类型以支持不同的数据和查询

    默认 _id

    所有的MongoDB集合有一个_id字段上的索引,这个索引是默认存在的。如果程序没有特别指定_id的值,那驱动程序或者Mongod将创建一个_id字段,其值为ObjectId。

    _id索引是唯一的,并且不允许客户端插入两个_id字段相同的文档。

    单字段

    除了默认_id上的索引,MongoDB支持文档中单个字段上的用户自定义的索引创建,此索引可以是升序,也可以是降序。

    Diagram of an index on the ``score`` field (ascending).

    对单字段索引和排序操作来说,索引键的排序顺序(升序或降序)无所谓,因为MongoDB可以从另一个方法遍历索引。

    复合索引

    MongoDB也支持对多字段的用户自定义索引,即,复合索引。

     复合索引中字段的顺序是有意义的。例如,如果一个复合索引的组成为{userid:1, score: -1},那索引排序为首先对userid升序排序,然后对于userid相同的文档,按score的降序排序。

    Diagram of a compound index on the ``userid`` field (ascending) and the ``score`` field (descending). The index sorts first by the ``userid`` field and then by the ``score`` field.

    对复合索引和排序操作来说,索引键的排序顺序(升序或降序)将决定这个索引是否支持某种排序操作。详情可参见复合索引的索引顺序对最终排序顺序的影响。

    参考复合索引多字段排序可获取复合索引的更多信息。

    多键索引(Multikey Index)

    MongoDB使用多键索引对存储在数组中的内容进行加索引。如果对一个拥有数组值的字段加索引,MongoDB创建此数组的每个元素上的索引。多键索引允许查询选择包含数组字段的文档,而匹配条件可以是数组的一个或多个元素。如果要被加索引的字段包含一个数组值,并且客户端不明确指定多键类型,那么MongoDB会自动决定是否创建多键索引。

    Diagram of a multikey index on the ``addr.zip`` field. The ``addr`` field contains an array of address documents. The address documents contain the ``zip`` field.

    如果要获取多键索引的更多信息,参见多键索引多键索引边界

    以下可参考原文,点击此处跳转

    地理空间索引(Geospatial Index)

    ...

    ...

  • 相关阅读:
    [大数据从入门到放弃系列教程]在IDEA的Java项目里,配置并加入Scala,写出并运行scala的hello world
    [大数据从入门到放弃系列教程]第一个spark分析程序
    Mac配置Scala和Spark最详细过程
    Mac配置Hadoop最详细过程
    [从零开始搭网站八]CentOS使用yum安装Redis的方法
    CentOS磁盘用完的解决办法,以及Tomcat的server.xml里无引用,但是项目仍启动的问题
    Mysql 删除重复数据只保留id最小的
    bootstrap媒体查询常用写法
    Arduino Uno 在win7 64位下的驱动问题
    VS项目模板文件位置
  • 原文地址:https://www.cnblogs.com/sjjsxl/p/5124630.html
Copyright © 2020-2023  润新知