mongo-索引

mongo索引

准备

假设有一数据库 user

[
  {
    "address": {
      "city": "shanghai",
      "state": "shanghai",
      "pincode": "232321"
    },
    "age": 12,
    "name": "jack",
    "tags": ["music", "cricket", "blogs"]
  }
]
索引基本操作
  • 查看索引
  • 删除索引
  • 重建索引
  • 创建索引的参数
查看索引
db.user.getIndexes()
删除索引
# 删除单个
db.user.dropIndex
# 删除全部
db.user.dropIndexes()
重建索引
db.user.reIndex()
索引类型
  1. 单键索引(Single Field)
    • 普通单键索引
    • 嵌套文档索引
    • 唯一索引
  2. 复合索引(Compound Index)
  3. 多键值索引(数组索引) Multikey Index
  4. 过期索引
  5. 哈希索引
  6. 地理位置索引
  7. 文本索引
单键索引(Single Field)
# 普通单键索引
db.user.createIndex({"age":-1},{"name":"idx_age"})
# 唯一索引
db.user.createIndex({"age":-1},{"name":"idx_age","unique":true})
# 嵌套文档索引
db.user.createIndex({"address.city":-1},{"name":"idx_address_city"})
复合索引(Compound Index)
db.user.createIndex({"name":-1,"age":-1},{"name": "idx_cp_name_age"})
多键值索引(数组索引) Multikey Index
db.user.createIndex({"tags":-1},{"name":"idx_arr_tags"})

索引规则

  1. **最期望看到的查询组合 **

    • Fetch+IDHACK
    • Fetch+ixscan
    • Limit+(Fetch+ixscan)
    • PROJECTION+ixscan
  2. 最不期望看到的查询组合

    • COLLSCAN(全表扫)
    • SORT(使用sort但是无index)
    • COUNTSCAN**(不使用索引进行count)
  3. 最左前缀原则

索引执行优化器

几个重要参数
  • queryPlanner:查询计划的选择器,首先进行查询分析,最终选择一个winningPlan,是explain返回的默认层面。
  • executionStats:为执行统计层面,返回winningPlan的统计结果
  • allPlansExecution:为返回所有执行计划的统计,包括rejectedPlan
db.user.find({"tags":"music"}).explain("executionStats")
Stage意义
COLLSCAN :全表扫描
IXSCAN:索引扫描
FETCH::根据索引去检索指定document
SHARD_MERGE:各个分片返回数据进行merge
SORT:表明在内存中进行了排序(与前期版本的scanAndOrder:true一致)
SORT_MERGE:表明在内存中进行了排序后再合并
LIMIT:使用limit限制返回数
SKIP:使用skip进行跳过
IDHACK:针对_id进行查询
SHARDING_FILTER:通过mongos对分片数据进行查询
COUNT:利用db.coll.count()之类进行count运算
COUNTSCAN:count不使用用Index进行count时的stage返回
COUNT_SCAN:count使用了Index进行count时的stage返回
SUBPLA:未使用到索引的$or查询的stage返回
TEXT:使用全文索引进行查询时候的stage返回

其他操作

# 慢sql
db.system.profile.find().pretty();
# 当前操作
db.currentOp()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值