Mongodb的索引操作


1. 为什么mongdb需要创建索引

  • 加快查询速度
  • 进行数据的去重

2. mongodb创建简单的索引方法

  • 语法:db.集合名.ensureIndex({属性:1}),1表示升序, -1表示降序

3. 创建索引前后查询速度对比

测试:插入10万条数据到数据库中

插入数据:

for(i=0;i<100000;i++){db.t1.insert({name:'test'+i,age:i})}

创建索引前:

db.t1.find({name:'test10000'})
db.t1.find({name:'test10000'}).explain('executionStats') # 显示查询操作的详细信息

创建索引:

db.t1.ensureIndex({name:1})

创建索引后:

db.t1.find({name:'test10000'}).explain('executionStats')

前后速度对比

4. 索引的查看

默认情况下_id是集合的索引 查看方式:db.集合名.getIndexes()

5. 删除索引

语法:db.集合名.dropIndex({'索引名称':1})

db.t1.dropIndex({name:1})
db.t1.getIndexes()

6. mongodb创建唯一索引

在默认情况下mongdb的索引域的值是可以相同的,创建唯一索引之后,数据库会在插入数据的时候检查创建索引域的值是否存在,如果存在则不会插入该条数据,但是创建索引仅仅能够提高查询速度,同时降低数据库的插入速度。

6.1 添加唯一索引的语法:

db.集合名.ensureIndex({"字段名":1}, {"unique":true})

6.2 利用唯一索引进行数据去重

根据唯一索引指定的字段的值,如果相同,则无法插入数据

db.t1.ensureIndex({"name":1}, {"unique":true})
db.t1.insert({name: 'test10000'})

7. 建立复合索引

在进行数据去重的时候,可能用一个域来保证数据的唯一性,这个时候可以考虑建立复合索引来实现。

例如:抓全贴吧信息,如果把帖子的名字作为唯一索引对数据进行去重是不可取的,因为可能有很多帖子名字相同

建立复合索引的语法:db.collection_name.ensureIndex({字段1:1,字段2:1})   【创建后可以单独使用索引1,但是不能单独使用索引2,只能是使用索引1后才能使用索引2】

8. 建立索引注意点

  • 根据需要选择是否需要建立唯一索引
  • 索引字段是升序还是降序在单个索引的情况下不影响查询效率,但是带复合索引的条件下会有影响
  • 数据量巨大并且数据库的读出操作非常频繁的时候才需要创建索引,如果写入操作非常频繁,创建索引会影响写入速度

    例如:在进行查询的时候如果字段1需要升序的方式排序输出,字段2需要降序的方式排序输出,那么此时复合索引的建立需要把字段1设置为1,字段2设置为-1

Mongodb的索引操作相关推荐

  1. 二、mongodb数据库系列——聚合操作 索引操作 权限管理

    一.mongodb的聚合操作 学习目标 了解 mongodb的聚合原理 掌握 mongdb的管道命令 掌握 mongdb的表达式 1 mongodb的聚合是什么 聚合(aggregate)是基于数据处 ...

  2. mongodb 输出数组字段_MongoDb文档操作、索引操作

    学习主题:MongoDb 学习目标: 掌握mongodb文档的更新 掌握mongodb文档的删除 掌握mongodb文档的查找 掌握mongodb文档的条件操作符 掌握mongodb中的索引操作 Mo ...

  3. MongoDB中的索引操作

    本文来说下MongoDB中的索引操作 文章目录 概述 createIndex() 方法 语法 createIndex() 可选参数 索引操作 测试实例 本文小结 概述 索引通常能够极大的提高查询的效率 ...

  4. 8天学通MongoDB——第四天 索引操作

    原文:8天学通MongoDB--第四天 索引操作 这些天项目改版,时间比较紧,博客也就没跟得上,还望大家见谅. 好,今天分享下mongodb中关于索引的基本操作,我们日常做开发都避免不了要对程序进行性 ...

  5. MongoDB复合索引详解

    摘要: 对于MongoDB的多键查询,创建复合索引可以有效提高性能. 什么是复合索引? 复合索引,即Compound Index,指的是将多个键组合到一起创建索引,这样可以加速匹配多个键的查询.不妨通 ...

  6. MongoDB:详细解释mongodb的高级操作,聚合和游标

    前几天总结了mongodb的安装入门.详细解释了增删改查的基本操作,今天再来总结下mongodb更高级的操作,聚合和游标. 一.聚合,mongodb的聚合操作一般分为四种情景,分别是:count.di ...

  7. MongoDB数据库索引基础知识与实战技巧

    本文内容源自Kyle Banker 的MongoDB In Action一书.主要描述了MongoDB索引相关的一些基础知识和使用技巧. 索引类型 虽然MongoDB的索引在存储结构上都是一样的,但是 ...

  8. 五、MongoDB的索引

    一.MongoDB的下载.安装与部署 二.MongoDB的基础知识简介 三.MongoDB的创建.更新和删除 四.MongoDB的查询 五.MongoDB的索引 1.简介 它就像是一本书的目录,如果没 ...

  9. mongodb及其索引的使用例子

    1.获取某个属性最大的value值并自增范例 因为mongo不支持类似select max操作,也不支持递增int的操作,所以采用目前的方案 #找到符合table_name的记录,find输出时只输出 ...

最新文章

  1. Python使用matplotlib可视化华夫饼图(Waffle Chart) 、华夫饼图可以直观地显示完成度(百分比)或者部分占整体的比例、从不同的分类变量来可视化华夫饼图(Waffle Chart
  2. php flock 死锁了,php – 防止由flock引起的死锁
  3. 10款最好的免费在线工具进行网站设计与开发
  4. 动态规划入门 洛谷P1108 低价购买
  5. .net 显示时间为YYYY-MM-DD格式
  6. 直接载入内存中的DLL
  7. kafka内存不断增加_分布式发布订阅消息系统Kafka 为什么快
  8. python中none是什么类型_如何在Python中”测试”None类型?
  9. Android音乐播放器高级开发
  10. 【原创】利用typeface实现不同字体的调用显示及String转换为Unicode
  11. 为什么能上QQ而不能上网
  12. 理解类路径是什么意思?如何运用包?
  13. armeabi-v7a arm64-v8a armeabi x86 x86_64区别
  14. Eclipse中文版之完美汉化教程(详细图解)
  15. 控制理论PID的理解
  16. Android 进阶之路《丢掉初学者的诟病》
  17. Jenkins上配置Robot Framework测试邮件通知模板
  18. AIIA开发者大会百度飞桨及EasyDL专场:带你看五花八门的产业AI实践
  19. 操作系统的奋斗(一)计算机系统概述
  20. 《Java 2 实用教程》读书笔记(二)

热门文章

  1. 用算法改造过的植物肉,有兴趣试试么?
  2. 比Python 3.8快20%,Pyston v2正式发布
  3. 确认了!MySQL 狠甩 Oracle 稳居 Top1!
  4. GitHub接连封杀开源项目惹众怒,CEO亲自道歉
  5. 为何Google、微软、华为将亿级源代码放一个仓库?从全球最大代码管理库说起...
  6. “不给钱就删库”的勒索病毒, 程序员该如何防护?
  7. 假设检验怎么做?这次把方法+Python代码一并教给你
  8. 英伟达发布RTX 2000系列显卡,“实时光线追踪”究竟能为游戏带来什么?
  9. 牛逼!一个故事讲清楚 NIO 了
  10. 设计一个成功的微服务,堪称必备的9个基础知识