06-索引

nobility 发布于 2022-12-06 3033 次阅读


索引

将表中的某一个或多个字段对应的所有字段值提取出来,使用一种可以快速查找的数据结构存储(即排序的数据结构,MongoDB使用的是B-Tree数据结构),同时存储上对应源数据的地址,在查询时,先经过索引查询该字段值,找到该字段值后,再根据索引内存储的源数据的地址直接获取源数据即可,使用索引可以大大提高查询、排序的效率

  • 单键索引:存储单个字段的索引
  • 组合索引:存储多个字段的索引,能支持前缀子查询,比如:三个键的索引A,B,C,可以支持A,B,CA,BA的索引查询,但是不能支持B,CCB的索引查询,因为索引是有序的,所以会导致第二个和第三个键在索引中是分散的,就无法做到快速查询
  • 多键索引:存储单个字段的索引,但是该字段值为数组,MongoDB会将数组中的所有元素就加入到索引中,即数组中每个元素都存储着对应着源数据的地址

索引操作

  • db.collection.getIndexes():获取集合的所有索引
  • db.collection.createIndex(document,options):为集合创建索引
    • document:指定创建索引的字段,正一升序,负一降序,升序降序会影响排序操作的效率
    • options:指定创建索引的特性
      • unique:创建唯一性索引,该字段将不能重复,包括null(字段不存在情况也是null)
      • sparse:创建稀疏性索引,只有该字段存在时(包括显式指定为null),该文档才会被加入索引,一般与unique同时使用
      • expireAfterSeconds:索引若是时间,则会按照指定的生存时间删除文档(超过当前时间多少秒就会被删除),单位秒;只能用于单键索引,若该字段是包含多个时间的数组则会以最小时间为主,即数组中只要有一个时间过期就会被删除;MongoDB使用的是一个后台进程来检测并自动删除过期的文档,所以删除操作可能会有一定的延时的
  • db.collection.dropIndex(indexNameORdocument):删除集合的索引,可以指定索引名或创建索引时的对象
  • db.collection.explain():显示执行集合,分析执行效率,后面需要链式调用需要分析的方法即可
    • 返回的文档中stage:代表查询时的方法
      • IXSCAN:索引扫描,或索引排序
      • PROJECTION:索引直接投影拿去
      • COLLSCAN:集合扫描
      • FETCH:数据源拿取
      • SORT:集合排序
此作者没有提供个人介绍
最后更新于 2022-12-06