mongodb 的索引】的更多相关文章

MongoDB的索引: 1. _id索引 该索引是大多数集合默认创建的索引,也就是说用户每插入一个数据,MongoDB会自动生成一条唯一的_id字段. 2. 单键索引 单键索引是最普通的索引,它不会自动创建,需要手动创建. 例如:dm.bochao_collection.ensureIndex({name:"zhangsan"}) 创建了一个name=zhangsan的索引 > db.bochao_collection.ensureIndex({x:11}) { "cr…
MongoDB 覆盖索引查询 官方的MongoDB的文档中说明,覆盖查询是以下的查询: 所有的查询字段是索引的一部分 所有的查询返回字段在同一个索引中 由于所有出现在查询中的字段是索引的一部分, MongoDB 无需在整个数据文档中检索匹配查询条件和返回使用相同索引的查询结果. 因为索引存在于RAM中,从索引中获取数据比通过扫描文档读取数据要快得多. 为了测试盖索引查询,使用以下 mycol 集合: { "_id" : 1, "name" : "tom&q…
前面的话 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录.这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的.本文将详细介绍MongoDB数据库索引 引入 索引能够提高查询效率,如何体现呢?接下来使用性能分析函数explain()来进行分析说明 首先,插入10万条数据 接着,不创建索引,来寻找time范围在100和200之间的文档 由图中所知,tot…
前面的话 本文将详细介绍MongoDB数据库索引构建情况分析 概述 创建索引可以加快索引相关的查询,但是会增加磁盘空间的消耗,降低写入性能.这时,就需要评判当前索引的构建情况是否合理.有4种方法可以使用 1.mongostat工具 2.profile集合介绍 3.日志 4.explain分析 mongostat mongostat是mongodb自带的状态检测工具,在命令行下使用.它会间隔固定时间获取mongodb的当前运行状态,并输出.如果发现数据库突然变慢或者有其他问题的话,首先就要考虑采用…
这个系列文章会分为两篇来写: 第一篇:入门篇,学习使用MongoDB数据库索引 第二篇:进阶篇,研究数据库索引原理--B/B+树的基本原理 1. 准备工作 在学习使用MongoDB数据库索引之前,有一些准备工作要做,之后的探索都是基于这些准备工作. 首先需要建立一个数据库和一些集合,这里我就选用一个国内手机号归属地的库,大约32W条记录,数据量不大,不过做一些基本的分析是够了. 首先我们建立一个数据库,叫做db_phone,然后导入测试数据.测试数据就是一些手机号归属地的信息.单个文档长这个样子…
一.引言     好久没有写东西了,MongoDB系列的文章也丢下好长时间了.今天终于有时间了,就写了一篇有关索引的文章.一说到"索引",用过关系型数据库的人都应该知道它是一个什么东西.当我们要访问的数据量大了的时候,可以通过建立索引来提高查询速度.关系型数据库有"索引"的概念,我们的MongoDB数据库也有索引的概念,今天我就来抛砖引玉,简单的说一说MongoDB文档数据库中的"索引"的概念.二.简介     索引通常能够极大的提高查询的效率,…
用过数据库的都知道,数据库索引与书籍的索引类似,都是用来帮助快速查找的.   MongoDB的索引跟关系型数据库的索引几乎一致.       1. 索引的创建   mongodb采用ensureIndex来创建索引,如:   db.user.ensureIndex({"name":1})   表示在user集合的name键创建一个索引,这里的1表示索引创建的方向,可以取值为1和-1   在这里面,我们没有给索引取名字,mongodb会为我们取一个默认的名字,规则为keyname1_di…
首先我们来了解索引,如果有基础的可以直接看最后面的操作. 可参照 DoNotStop 的CSDN 博客 ,全文地址请点击: https://blog.csdn.net/u013725455/article/details/52037897 创建索引: mongodb使用createIndex()和ensureIndex()方法来创建索引,前者用于3.0及以上版本,后者用于3.0以下版本.语法:db.COLLECTION_NAME.ensureIndex(keys[,options])keys:要…
摘要: 对于MongoDB的多键查询,创建复合索引可以有效提高性能. 什么是复合索引? 复合索引,即Compound Index,指的是将多个键组合到一起创建索引,这样可以加速匹配多个键的查询.不妨通过一个简单的示例理解复合索引. students集合如下: db.students.find().pretty(){ "_id" : ObjectId("5aa7390ca5be7272a99b042a"), "name" : "zhang…
一.MongoDB的下载.安装与部署 二.MongoDB的基础知识简介 三.MongoDB的创建.更新和删除 四.MongoDB的查询 五.MongoDB的索引 1.简介 它就像是一本书的目录,如果没有它,我们就需要对整个书籍进行查找来获取需要的结果,即所说的全盘扫描: 而有了目录(索引)之后就可以通过它帮我们定位到目标所在的位置,快速的获取我们想要的结果. 2.演示 第一步,向用户集合users中插入100W条数据 var insertUsers = function() { var star…
原文链接:图解 MongoDB 地理位置索引的实现原理 地理位置索引支持是MongoDB的一大亮点,这也是全球最流行的LBS服务foursquare 选择MongoDB的原因之一.我们知道,通常的数据库索引结构是B+ Tree,如何将地理位置转化为可建立B+Tree的形式,下文将为你描述. 首先假设我们将需要索引的整个地图分成16×16的方格,如下图(左下角为坐标0,0 右上角为坐标16,16): 单纯的[x,y]的数据是无法建立索引的,所以MongoDB在建立索引的时候,会根据相应字段的坐标计…
1:ensureIndex() 方法 MongoDB使用 ensureIndex() 方法来创建索引. 语法 ensureIndex()方法基本语法格式如下所示: }) 语法中 Key 值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可.   对title列创建索引: db.col.ensureIndex({"title":}) 创建联合索引: db.col.ensureIndex({"title":,"descript…
查看语句执行计划: explain() 在mongodb3+版本后输出格式发生改变: 详情参见:https://docs.mongodb.com/v3.0/reference/method/cursor.explain/ 查看执行耗时:db.collection名称.find().explain('executionStats') 一,索引介绍 mongodb具有两类索引,分别为单键索引和复合索引. 1.单键索引是最简单的一种索引,创建单键索引的开销要比复合索引小很多.单键索引主要用于针对单值查…
            索引加快了查询速度,但是降低了写入速度.所以不要在没必要的属性上加索引.             在 mongodb 中索引可以按倒序/正序创建,便于排序.             默认使用 b-tree 索引,2.4 版本后也允许创建 hash 索引,哈希索引在范围内查找和顺序查找上有明显的缺陷(因为插入的时候根据算法插入不同的位置,在读取的时候就会在硬盘上四处去查询,所以效率相对 Btree(二叉树) 就较低了). 创建索引:          db.表名.ensur…
1 mongoDB索引的管理 本节介绍mongoDB中的索引,熟悉mysql/sqlserver等关系型数据库的小伙伴应该都知道索引对优化数据查询的重要性.我们先简单了解一下索引:索引的本质就是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据(数据row或者document)的物理地址,索引可以大大加快查询的速度,这是因为使用索引后可以不再扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址(多数为B-tree查找),然后通过地址来访问相应的数据. 索引可以加快数据检…
目录 背景 初步分析 索引seeks的原因 优化思路 小结 声明:本文同步发表于 MongoDB 中文社区,传送门: http://www.mongoing.com/archives/27310 背景 最近线上的一个工单分析服务一直不大稳定,监控平台时不时发出数据库操作超时的告警. 运维兄弟沟通后,发现在每天凌晨1点都会出现若干次的业务操作失败,而数据库监控上并没有发现明显的异常. 在该分析服务的日志中发现了某个数据库操作产生了 SocketTimeoutException. 开发同学一开始希望…
目录 背景 初步分析 索引seeks的原因 优化思路 小结 声明:本文同步发表于 MongoDB 中文社区,传送门:http://www.mongoing.com/archives/27310 背景 最近线上的一个工单分析服务一直不大稳定,监控平台时不时发出数据库操作超时的告警. 运维兄弟沟通后,发现在每天凌晨1点都会出现若干次的业务操作失败,而数据库监控上并没有发现明显的异常. 在该分析服务的日志中发现了某个数据库操作产生了 SocketTimeoutException. 开发同学一开始希望通…
目录 背景 初步分析 索引seeks的原因 优化思路 小结 声明:本文同步发表于 MongoDB 中文社区,传送门:http://www.mongoing.com/archives/27310 背景 最近线上的一个工单分析服务一直不大稳定,监控平台时不时发出数据库操作超时的告警.运维兄弟沟通后,发现在每天凌晨1点都会出现若干次的业务操作失败,而数据库监控上并没有发现明显的异常.在该分析服务的日志中发现了某个数据库操作产生了 SocketTimeoutException. 开发同学一开始希望通过调…
创建索引的好处是可以加快查询速度,但是但来的负面影响就是磁盘的开销和降低写入性嫩. 查看评判当前索引构建情况方法: 1. 使用mongostat工具: 查看mongodb运行状态的程序 使用格式:mongostat -h 127.0.0.1:12345 2. profile集合使用 db.getProfilingStatus()  查看当前的profile的设置 > db.getProfilingStatus() { "was" : 0, "slowms" :…
地理位置索引支持是MongoDB的一大亮点,这也是全球最流行的LBS服务foursquare 选择MongoDB的原因之一.我们知道,通常的数据库索引结构是B+ Tree,如何将地理位置转化为可建立B+Tree的形式,下文将为你描述. 首先假设我们将需要索引的整个地图分成16×16的方格,如下图(左下角为坐标0,0 右上角为坐标16,16): 单纯的[x,y]的数据是无法建立索引的,所以MongoDB在建立索引的时候,会根据相应字段的坐标计算一个可以用来做索引的hash值,这个值叫做geohas…
全文索引 建立方法: --在articles集合的key字段上创建全文索引 db.articles.ensureIndex({key:"text"}) --在articles集合的key_1,key_2字段上创建全文索引 db.articles.ensuereIndex({key_1:"text",key_2:"text"}) --在articles集合的所有字段上创建全文索引 db.articles.ensuereIndex({"$*…
一.索引详讲 索引是什么,索引就好比一本书的目录,当我们想找某一章节的时候,通过书籍的目录可以很快的找到,所以适当的加入索引可以提高我们查询的数据的速度. 准备工作,向MongoDB中插入20000条记录,没条记录都有number和name > ; i< ;i++){ ... db.books.insert({number:i,name:"book"+i}) ... } WriteResult({ }) > db.books.}) { , "name&quo…
作者:孔德雨 MongoDB的geo索引是其一大特色,本文从原理层面讲述geo索引中的2d索引的实现. 2d 索引的创建与使用 通过 db.coll.createIndex({"lag":"2d"}, {"bits":int})) 来创建一个2d索引,索引的精度通过bits来指定,bits越大,索引的精度就越高.更大的bits带来的插入的overhead可以忽略不计. 通过 db.runCommand({ geoNear: tableName,…
官方的MongoDB的文档中说明,覆盖查询是以下的查询: 1. 所有的查询字段是索引的一部分 2. 所有的查询返回字段在同一个索引中 由于所有出现在查询中的字段是索引的一部分, MongoDB 无需在整个数据文档中检索匹配查询条件和返回使用相同索引的查询结果.因为索引存在于RAM中,从索引中获取数据比通过扫描文档读取数据要快得多. 但是,如果是以下的查询,不能使用覆盖索引查询: 1. 所有索引字段是一个数组 2. 所有索引字段是一个子文档…
1.为普通字段添加索引,并且为索引命名 db.集合名.createIndex( {"字段名": 1 },{"name":'idx_字段名'}) 说明: (1)索引命名规范:idx_<构成索引的字段名>.如果字段名字过长,可采用字段缩写.          (2)字段值后面的 1 代表升序:如是 -1 代表 降序. 2.为内嵌字段添加索引 db.集合名.createIndex({"字段名.内嵌字段名":1},{"name&qu…
最近事情比较多,本篇文章算是把遇到的问题杂糅到一起了. 背景:笔者最近在写一个mongo查询小程序,由于建立索引时字段名用大写,而查询的时候用小写. 代码如下: db.getCollection("xxx.aa").find({second_email:"/^mylove_foryou@qq.com/"}) 1200万的数据,第一次执行耗时:43.741秒,这在正式环境肯定是不允许的. 通过查询执行计划,发现并没有使用时索引,导致查询的时候很慢. 笔者在mongo3…
{ "ok" : 0.0, "errmsg" : "WiredTigerIndex::insert: key too large to index, failing 1483 { : \"山东隔断|山东隔断厂家|山东隔断价格|山东活动隔断|山东酒店活动隔断|烟台活动玻璃隔断|山东活动展板|山东隔��...\" }", "code" : 17280 } MongoDB will not create an i…
索引 以提升查询速度 测试:插入十万条数据到数据库中 for(i=0;i<100000;i++){db.t255.insert({name:'test'+i,age:i})} db.t1.find({name:'test100000'}) db.t1.find({name:'test100000'}).explain('executionStats') 可以查看查询的时间 建立索引之后对比: 语法:db.集合.ensureIndex({属性:1}),1表示升序,-1表示降序 具体操作: db.集…
数据准备:在mongodb命令行终端执行如下代码 for(var i=0;i<100000;i++) { ... db.users.insert({username:"user"+i,age:i}) ... } 1. 默认索引 MongoDB有个默认的“_id”的键,他相当于“主键”的角色.集合创建后系统会自动创建一个索引在“_id”键上,它是默认索引,索引名叫“_id_”,是无法被删除的.我们可以通过以下方式查看: var _idIndex = mongoCollection.…
B-树由来 定义:B-树是一类树,包括B-树.B+树.B*树等,是一棵自平衡的搜索树,它类似普通的平衡二叉树,不同的一点是B-树允许每个节点有更多的子节点.B-树是专门为外部存储器设计的,如磁盘,它对于读取和写入大块数据有良好的性能,所以一般被用在文件系统及数据库中. 先来看看为什么会出现B-树这类数据结构. 传统用来搜索的平衡二叉树有很多,如 AVL 树,红黑树等.这些树在一般情况下查询性能非常好,但当数据非常大的时候它们就无能为力了.原因当数据量非常大时,内存不够用,大部分数据只能存放在磁盘…