博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongoDB索引创建(5)
阅读量:5751 次
发布时间:2019-06-18

本文共 1488 字,大约阅读时间需要 4 分钟。

索引创建

1:索引提高查询速度,降低写入速度,权衡常用的查询字段,不必在太多列上建索引

2. 在mongodb中,索引可以按字段升序/降序来创建,便于排序

3. 默认是用btree来组织索引文件,2.4版本以后,也允许建立hash索引.

 

查看查询计划

db.find(query).explain();

"cursor" : "BasicCursor", ----说明没有索引发挥作用

"nscannedObjects" : 1000 ---理论上要扫描多少行

cursor" : "BtreeCursor sn_1", 用到的btree索引

 

 

索引常用命令:

查看当前索引状态: db.collection.getIndexes();

db.articles.getIndexes();

创建普通的单列索引:db.collection.ensureIndex({field:1/-1});  1是升续 2是降续

db.articles.ensureIndex({title:1})

 

删除单个索引

db.collection.dropIndex({filed:1/-1});

 

一下删除所有索引

db.collection.dropIndexes();

 

创建多列索引 

db.collection.ensureIndex({field1:1/-1, field2:1/-1});

 

创建子文档索引

db.collection.ensureIndex({filed.subfield:1/-1});

 

 

 

创建唯一索引:

db.collection.ensureIndex({filed.subfield:1/-1}, {

unique:true});

 

创建稀疏索引:

稀疏索引的特点------如果针对field做索引,针对不含field列的文档,将不建立索引.

与之相对,普通索引,会把该文档的field列的值认为NULL,并建索引.

适宜于: 小部分文档含有某列时.

db.collection.ensureIndex({field:1/-1},{sparse:true});

 

> db.tea.find();

{ "_id" : ObjectId("5275f99b87437c610023597b"), "email" : "a@163.com" }

{ "_id" : ObjectId("5275f99e87437c610023597c"), "email" : "b@163.com" }

{ "_id" : ObjectId("5275f9e887437c610023597e"), "email" : "c@163.com" }

{ "_id" : ObjectId("5275fa3887437c6100235980") }

如上内容,最后一行没有email列,

如果分别加普通索引,和稀疏索引,

对于最后一行的email分别当成null 和 忽略最后一行来处理.

根据{email:null}来查询,前者能查到,而稀疏索引查不到最后一行.

 

 

创建哈希索引(2.4新增的)

哈希索引速度比普通索引快,但是,无法对范围查询进行优化.

适宜于---随机性强的散列

db.collection.ensureIndex({file:’hashed’});

 

重建索引

一个表经过很多次修改后,导致表的文件产生空洞,索引文件也如此.

可以通过索引的重建,减少索引文件碎片,并提高索引的效率.

类似mysql中的optimize table

 

db.collection.reIndex()

转载地址:http://sykkx.baihongyu.com/

你可能感兴趣的文章
springboot系列十 Spring-Data-Redis
查看>>
Confluence 6 注册外部小工具
查看>>
excel进行矩阵计算
查看>>
基于Android平台的动态生成控件和动态改变控件位置的方法
查看>>
Java集合(二) Map 架构
查看>>
linux 死机分析
查看>>
BOM
查看>>
LeetCode:Nim Game - 尼姆博弈
查看>>
Alpha冲刺&总结报告(12/12)(麻瓜制造者)
查看>>
iOS:CAEmitterLayer粒子效果
查看>>
iOS: Block的循环引用
查看>>
mysql实战02 | 日志系统:一条SQL更新语句是如何执行的?
查看>>
Xamarin.Android 引导页
查看>>
LINUX系统、磁盘与进程的相关命令
查看>>
测试九 赛后感受
查看>>
ECC椭圆曲线详解(有具体实例)
查看>>
关于WechatApp学习总结
查看>>
Linux常见命令(二)
查看>>
纯数学教程 Page 325 例LXVIII (9)
查看>>
document.write()的用法和清空的原因
查看>>