ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

UK Day46 - MongoDB - 索引

2021-11-12 23:05:07  阅读:165  来源: 互联网

标签:UK MongoDB db collection 索引 哈希 创建 Day46 createIndex


  1. 索引作用:提高查询语句的执行效率。MongoDB索引默认创建的是B树索引。

  2. 创建索引

    • 为单个字段创建索引,语法:db.collection_name.createIndex({"field":1})

      • Eg:为age字段创建索引:db.Animals.createIndex({"age":1}),创建成功如图所示:

    • 为多个字段创建索引:db.collection_name.createIndex({"field1":1, "field2":-1, ……})

  3. 删除索引

    • 删除指定索引:db.collection_name.dropIndex(delete_index)

    • 可以同时删除集合中的多个索引:db.collection_name.dropIndexes()

  4. 获取集合中所有索引:db.collection_name.getIndexes()

  5. 索引类型

    1. 单字段索引

      • 在文档的单个字段上创建用户定义的升序/降序索引

      • 在MongoDB中,每个集合都会默认创建一个唯一索引列 _id_id 列是最基本的单列索引。

      • 创建单列索引语法:db.collection_name.createIndex( { field: -1 } )。(-1表示索引值按降序排列,1表示升序排列)

      • 创建单列唯一索引语法:db.collection_name.createIndex( {keyname : -1},{“unique” : true})

    2. 复合索引

      • MongoDB支持在多列上创建索引。但是,复合索引不能包含哈希索引列。

        创建复合索引可以使用以下语法:

        db.collection.createIndex( { field1 :type1, field2 : type2 , ......} )

    3. 多键索引

      • 如果索引字段的值为数组,MongoDB会创建数组中的每个元素的索引键(即多键索引),不需要明确指定多键型。但是,哈希索引不能是多键。

      • 创建多键索引语法:db.collection.createIndex({ field: 1/-1 } )

    4. 全文索引

      • MongoDB提供全文索引支持文本搜索查询字符串内容。全文索引可以是其值为字符串或字符串元素的数组的字段。目前,MongoDB集合最多只支持一个全文索引。

      • 创建全文索引语法:db.collection.createIndex( { fields : “text” } )

      • 还可以在多列上创建全文索引:db.collection.createIndex( { field1 : “text”,fields : “text”,......} )

    5. 地理空间索引

      • 适用场景,比如:找到离当前位置最近的N个场所。

      • 目前不需要了解。

    6. 哈希索引

      • 语法:db.collection_name.createIndex({ _id : “hashed”} )

      • 哈希索引支持分片使用哈希片键。基于分片使用哈希索引的字段作为片键在分片集群分区数据。在分片集合中,使用哈希索引作为片键结果得到更加随机分布的数据。

      • MongoDB支持任何单一的列的哈希索引。但不支持多键(即数组)索引。

      • 不能在哈希索引列或指定哈希索引唯一约束字段上创建复合索引;但是,在同一个字段上,可以创建哈希索引和非哈希索引。MongoDB会使用标量索引范围查询。

标签:UK,MongoDB,db,collection,索引,哈希,创建,Day46,createIndex
来源: https://www.cnblogs.com/OFSHK/p/15546795.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有