zoukankan      html  css  js  c++  java
  • mongodb-4.4.10版本的索引管理:创建、删除

    索引主要用于排序检索。mysql里的索引存储结构是B+Tree,而mongo的索引结构是btree,两者的区别请查看我的另一篇博文《mysql5.7一颗B+树可以存放多少行数据?为什么使用B+树(B+Tree)而不是B树(BTree)?

    索引属性表

    属性名 类型 说明
    background boolean 是否后台构建索引,在生产环境中,如果数据量太大,构建索引可能会消耗很长时间,为了不影响业务,可以加上此参数,后台运行同时还会为其他读写操作让路
    unique boolean 是否为唯一索引
    name string 索引名字
    sparse boolean 是否为稀疏索引,索引仅引用具有指定字段的文档。

    创建索引

    单键唯一索引:db.users.createIndex({username :1},{unique:true});

    单键唯一稀疏索引:db.users. createIndex({username :1},{unique:true,sparse:true});

    复合唯一稀疏索引:db.users. createIndex({username:1,age:-1},{unique:true,sparse:true});    // 按照username asc排序,按照age desc排序存储到索引,sparse true表示为稀疏索引,所谓稀疏索引,就是该文档有这个字段就为该文档建立索引,没有就不建。unique true表示唯一索引。

    创建哈希索引并后台运行:db.users. createIndex({username :'hashed'},{background:true});

    多键索引:在数组的属性上建立索引,例如:db.users. createIndex({favorites.city:1});针对这个数组的任意值的查询都会定位到这个文档,既多个索引入口或者键值引用同一个文档

    删除索引

    根据索引名字删除某一个指定索引:db.users.dropIndex("username_1");

    删除某集合上所有索引:db.users.dropIndexs();

    重建某集合上所有索引:db.users.reIndex();

    查询集合上所有索引:db.users.getIndexes();

    索引的特点

    越多的索引代表占用内存越多,会让写入变慢。

    mongoDB通常在一次查询里使用一个索引,所以多个字段的查询或者排序需要复合索引才能更加高效。

    复合索引的顺序非常重要,参考MySQL里B+Tree索引的存储原理。

    尽量在数据量变得庞大之前构建和优化索引,因为该过程往往开销很大,比如时间开销很大。

    可以通过explain去验证查询中有没有用到索引,请查看《mongodb-4.4.10版本SQL查询进阶,mongodb与mysql的select SQL大比拼

    【复合索引使用案例分析】

    mongo里的复合索引和mysql里的复合索引有着相似之处。假如建立了这样一个复合索引:

    db.users. createIndex({username:1,age:-1});     按照username升序age降序建立了一个索引

    db.users.find({“username”:1,age:-1}).explain('executionStats')    // 查询方式1,用到了索引

    db.users.find({“username”:-1,age:1}).explain('executionStats')    // 查询方式2,用到了索引

    db.users.find({“username”:-1,age:-1}).explain('executionStats')    // 查询方式3,没有用到索引,因为两个排序都没用上,参考mysql里的b+tree索引,它是不可以倒序去查询的

    db.users.find({age:-1,“username”:1}).explain('executionStats')    // 查询方式4,没有用到索引,因为字段顺序不对,参考mysql里的b+tree索引,字段查询顺序也很重要,不过这一点,mysql高版本里的查询优化器里有优化过

    end.

    支付宝扫一扫,为女程序员打赏!
    作者:梦幻朵颜
    版权:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    根据EsLint配置WebStorm格式化代码风格
    Vue中使用vant-UI实现移动端自定义省市区三级联动
    Vue中使用Element-UI实现表格跨页多选
    Vue中使用iview-UI实现切换Tab页网络请求优化
    Vue中使用iview-UI按需引入Select组件下拉框无法生效问题
    Vue中使用iview-UI表格样式修改和使用自定义模板数据渲染相关
    Vue中使用Element-UI表单验证相关问题及解决
    Vue 3.0 多页面项目之商家平台练习
    五 创建道路模型(2 道路的挖填方量计算及条件部件)
    五 创建道路模型(1 道路三要素)
  • 原文地址:https://www.cnblogs.com/zhuwenjoyce/p/15500842.html
Copyright © 2011-2022 走看看