mongoDB - 索引

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/java_18945106612/article/details/86772527

mongoDB - 索引


  1. 意义使用索引可以显著地加快查询速度

  2. 索引的种类

    • _id索引
      • 绝大部分集合默认建立的索引
    • 单键索引
      • 最普通的索引
      • 单键索引不会自动创建
      • 创建方式:
        在这里插入图片描述
    • 多键索引
      • 与单键索引创建形式相同,区别在于字段的值
      • 单键索引:职位单一值,如字符串,数字日期等 / 多键索引:例如数组;
    • 复合索引
      • 当查询条件不唯一时,建立复合索引
      • 创建方式:
        在这里插入图片描述
    • 过期索引
      • 一段时间后过期的索引
      • 索引过期后,相应数据会被删除
      • 适合存储在一段时间后会失效的数据,比如用户的登录数据、存储日志等
      • 存储在过期索引字段的值必须是指定的时间类型(必须是ISODate或者ISODate数组,不能使用时间戳,否则不能被自动删除)
      • 如果指定了ISODate数组,则按照最小的时间进行删除
      • 过期索引不能是复合索引
      • 删除时间是不精确的
      • 创建方式:在这里插入图片描述
    • 全文索引
      • mongoDB中每个collections只能创建一个全文索引
      • 创建方法:在这里插入图片描述
      • 使用【db.collection.find($text:{$search:“aa bb -cc”}})】表示:查询所有包含aa 或 bb 不含 cc的结果
      • 使用【db.collection.find($text:{$search:"\“aa\” \“bb\” \“cc\”"}})】表示包含 aa bb cc字符串的结果
      • [相似度] $meta操作符:
        • {score:{$meta:“textScore”}} 写在查询条件后面可以返回结果的相似度
        • 与sort一起使用;在这里插入图片描述
      • 全文索引的使用限制
        • 每次查询,只能指定一个$text查询
        • $text查询不能出现在 $nor查询中
        • 查询中如果包含了$text,hint不起作用
        • 全文索引还不支持中文(2014)
    • 地理位置索引
      • 概念
        将一些点的位置存储在MongoDB中,创建索引后可以按照位置查找其他点。
      • 子分类:
        • 2d索引,用于存储和查询平面上的点;
        • 2dsphere索引,用于查询和查找球面上的点
      • 查找方式:
        • 查找距离某个点一定距离内的点
        • 查找包含在某区域内的点
      • 2d索引:
        • 创建:db.location.ensureIndex({w:“2d”})
        • 插入:db.location.insert({w:[100,100]})
        • 查找:db.location.find({w:{$near:[1,1]}})
        • 查找(设限): db.location.find({w:{$near:[1,1],$maxDistance:10}})
        • 查询某形状内数据: 使用 $geoWithin
          - $box:矩形 {$box:[[<x1>,<y1>],[<x2>,<y2>]}
          在这里插入图片描述
          - $center:圆形 {$center:[[<x1>,<y1>],r]}在这里插入图片描述
          - $polygon:多边形 {$polygon:[[<x1>,<y1>],[<x2>,<y2>],[<x3>,<y3>]]}在这里插入图片描述
        • geoNear查询:
          在这里插入图片描述
      • 2dsphere索引:
        • 概念:球面地理位置索引
        • 创建方式:db.imooc2.ensureIndex({w:“2dsphere”})
        • 位置表示方式:GeoJSON描述一个点、直线、多边形等形状
        • 格式:{type:"",coordinates:[<coordinates>]}
  3. 索引属性

    • 命名
      db.imooc2.ensureIndex({x:1,y:1,z:1,m:1},{name:“normal_index”})
    • 删除
      db.imooc2.dropIndex(“normal_index”)
    • 查询
      db.imooc2.getIndexes()
    • 唯一性 unique
      db.imooc2.ensureIndex({},{unique:true/false})
    • 稀疏性sparse
      db.imooc2.ensureIndex({},{sparse:true/false})
    • 定时删除

猜你喜欢

转载自blog.csdn.net/java_18945106612/article/details/86772527