mongodb(三)
索引详讲
索引管理
空间索引
for(var i = 0 ; i<200000 ;i++){
db.books.insert({number:i,name:i+"book"})
}
1.创建简单索引
数据准备index.js
1.1.先检验一下查询性能
var start = new Date()
db.books.find({number:65871})
var end = new Date()
end - start
1.2.为number 创建索引,1表示正序,-1表示倒序
db.books.ensureIndex({number:1})
1.3.再执行第一部的代码可以看出有数量级的性能提升
2.索引使用需要注意的地方
2.1.创建索引的时候注意1是正序创建索引-1是倒序创建索引
2.2.索引的创建在提高查询性能的同事会影响插入的性能
对于经常查询少插入的文档可以考虑用索引
2.3.符合索引要注意索引的先后顺序
2.4.每个键全建立索引不一定就能提高性能呢
索引不是万能的
2.5.在做排序工作的时候如果是超大数据量也可以考虑加上索引
用来提高排序的性能
3.索引的名称
3.1用VUE查看索引名称

3.2创建索引同时指定索引的名字
db.books.ensureIndex({name:-1},{name:”bookname”})

4.唯一索引
4.1如何解决文档books不能插入重复的数值
建立唯一索引
db.books.ensureIndex({name:-1},{unique:true})
试验
db.books .insert({name:”1book”})

5.踢出重复值
5.1如果建议唯一索引之前已经有重复数值如何处理
db.books.ensureIndex({name:-1},{unique:true,dropDups:true})
6.Hint
6.1如何强制查询使用指定的索引呢?
db.books.find({name:"1book",number:1}).hint({name:-1})
指定索引必须是已经创建了的索引

7.Expain
7.1如何详细查看本次查询使用那个索引和查询数据的状态信息
db.books.find({name:"1book"}).explain()

“cursor” : “BtreeCursor name_-1“ 使用索引
“nscanned” : 1 查到几个文档
“millis” : 0 查询时间0是很不错的性能
1.system.indexes
1.1在shell查看数据库已经建立的索引
db.system.indexes.find()
db.system.namespaces.find()
2.后台执行
2.1执行创建索引的过程会暂时锁表问题如何解决?
为了不影响查询我们可以叫索引的创建过程在后台
db.books.ensureIndex({name:-1},{background:true})
3.删除索引
3.1批量和精确删除索引
db.runCommand({dropIndexes : ”books” , index:”name_-1”})
db.runCommand({dropIndexes : ”books” , index:”*”})
1.mongoDB提供强大的空间索引可以查询出一定范围的地理坐标.看例子
准备数据map.json
var map = [{
"gis" : {
"x" : 185,
"y" : 150
}
},{
"gis" : {
"x" : 70,
"y" : 180
}
},{
"gis" : {
"x" : 75,
"y" : 180
}
},{
"gis" : {
"x" : 185,
"y" : 185
}
},{
"gis" : {
"x" : 65,
"y" : 185
}
},{
"gis" : {
"x" : 50,
"y" : 50
}
},{
"gis" : {
"x" : 50,
"y" : 50
}
},{
"gis" : {
"x" : 60,
"y" : 55
}
},{
"gis" : {
"x" : 65,
"y" : 80
}
},{
"gis" : {
"x" : 55,
"y" : 80
}
},{
"gis" : {
"x" : 0,
"y" : 0
}
},{
"gis" : {
"x" : 0,
"y" : 200
}
},{
"gis" : {
"x" : 200,
"y" : 0
}
},{
"gis" : {
"x" : 200,
"y" : 200
}
}]
for(var i = 0;i<map.length;i++){
db.map.insert(map[i])
}

1.查询出距离点(70,180)最近的3个点
添加2D索引
db.map.ensureIndex({"gis":"2d"},{min:-1,max:201})
默认会建立一个[-180,180]之间的2D索引
查询点(70,180)最近的3个点
db.map.find({"gis":{$near:[70,180]}},{gis:1,_id:0}).limit(3)
2.查询以点(50,50)和点(190,190)为对角线的正方形中的所有的点
db.map.find({gis:{"$within":{$box:[[50,50],[190,190]]}}},{_id:0,gis:1})
3.查询出以圆心为(56,80)半径为50规则下的圆心面积中的点
db.map.find({gis:{$within:{$center:[[56,80],50]}}},{_id:0,gis:1})

mongodb(三)的更多相关文章
- NOSQL Mongo入门学习笔记 - C++连接Mongodb(三)
OS环境: Centos 7.1 release X86_64 编译环境: G++ 4.8.3 已经成功搭建好了Mongodb,也初步在命令行中的查询与写入数据的基本方法,现在通过C++来连接Mong ...
- MongoDB(三)——CRUD
MongoDB作为非关系型数据库.还是传统数据库的增删改查有很大的差别的.这里仅仅是将知识点进行了一下提纲挈领,实际用的时候.我们百度一下具体使用方法就可以. 先看大的几个方面: 一.对于里边的插入和 ...
- MongoDB三节点高可用模式安装
设备: 三个1G.20G.1核的虚拟机,系统是SentOS7 min 清除原始自数据目录: rm -fr /home/mongosingle/ 创建目录: mkdir -p /home/mongosi ...
- mongodb三种存储引擎高并发更新性能专题测试
背景说明 近期北京理财频道反馈用来存放股市实时数据的MongoDB数据库写响应请求很慢,难以跟上业务写入速度水平.我们分析了线上现场的情况,发现去年升级到SSD磁盘后,数据持久化的磁盘IO开销已经不是 ...
- Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)
一.简单介绍 Spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一 ...
- Spring Data MongoDB 三:基本文档查询(Query、BasicQuery
一.简介 spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...
- MongoDB(三):数据库操作、集合操作
1. 数据库操作 看完前面的文章,大家应该把环境搭建好了,下面我们就开始学习MongoDB的一些基本操作了. 首先我们要了解的一些要点: MongoDB将数据存储为一个文档,数据结构由键值对(key= ...
- MongoDB (三) MongoDB 安装
MongoDB安装在Windows上 在 Windows上,首先要安装 MongoDB下载最新发布的MongoDB: http://www.mongodb.org/downloads 确保得到正确的版 ...
- mongodb三种引擎测试(转)
文章http://diyitui.com/content-1459560904.39084552.html亲测了根据证券行情存储的性能情况,我们目前使用load local infile,平均每秒更新 ...
- 学习MongoDB 三: MongoDB无法启动的解决方法
一简介 我们之前介绍了MongoDB入门(安装与配置),我们今天在打开MongDB时,我们先运行cmd.exe进入dos命令界面,然后进入cd D:\mongodb\bin目录下,启动服务或者mon ...
随机推荐
- yum源笔记
1. epel源,使用yum安装htop http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm 2 ...
- sssp-springmvc+spring+spring-data-jpa问题总结
问题:Caused by: java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to re ...
- spring beans 源码解读
从把spring下下来,导入到eclipse,花了几个小时的时间. 本来壮志雄心的说要,满满深入学习研读spring源码,现在看来还是不太现实,太难懂了,各种依赖,说明都是英文,整个串起来理解,深入研 ...
- BZOJ1098 POI2007 办公楼biu 【链表+bfs】
Description FGD开办了一家电话公司.他雇用了N个职员,给了每个职员一部手机.每个职员的手机里都存储有一些同事的电话号码.由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄,FGD决 ...
- 出让执行权:Task.Yield, Dispathcer.Yield
Yield 这个词很有意思,叫做“屈服”“放弃”“让步”,字面意义上是让出当前任务的执行权,转而让其他任务可以插入执行.Task.Dispatcher.Thread 都有 Yield() 方法,看起来 ...
- MYSQL在当前日期的基础上加上N(年月日分秒)
//把id为1的那条数据的开始时间改为现在 结束时间改为开始时间的1个月后 update 表明 set begintime=now(),endtime=date_add(NOW(), interv ...
- 《selenium2 python 自动化测试实战》(18)——自动化测试模型(一)
线性测试 已经被淘汰了:线性测试就是一个脚本完成一个场景,代码基本没有复用,每一个脚本都要从头开始写——这哪行. 模块化与类库 这个就是分模块:有点类似面系那个对象,把功能(比如登录)单独拿出来,当下 ...
- Tornado之实例和扩展
1.Tornado文件的结构: 1.Controllers控制器 2.Models数据库操作 3.Views前端显示 2.样例 #!/usr/bin/env python # -*- coding: ...
- openresty 几个插件使用
1. jwt opm get SkyLothar/lua-resty-jwt 2. cookie opm get p0pr0ck5/lua-resty-cookie 3. http ...
- yum命令集
升级相关命令: yum update : 安装所有更新软件 yum update xxx : 仅更新指定的软件 yum check-update : 列出所有可更新的软件清单 yum list : 列 ...