MongoDB中的索引
1、普通单列索引
我们用如下代码来测试:
for(var i=0;i<200000;i++){
(福利推荐:阿里云、腾讯云、华为云服务器最新限时优惠活动,云服务器1核2G仅88元/年、2核4G仅698元/3年,点击这里立即抢购>>>)
db.java.insert({name:'xiao'+i,age:i})
}
第一、我们先检验一下查询性能
var start=new Date()
db.java.find({name:’xiao156789′})
var end=new Date()
end-start
17510
第二、为 name 创建索引
db.java.ensureIndex({name:1})
{
"createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1
}
第三、再执行第一部分代码可以看出有数量级的性能提升
语法:db.集合名.ensureIndex({键名:1}) :1是升序,-1是降序
2、多列索引(复合索引)
创建多列索引 语法:db.集合名.ensureIndex({field1:1/-1,field2:1/-1}) 对 name 和 age 建立一个复合索引,可以使用 db.集合名.getIndexes() 查看创建的索引情况
3、子文档索引
语法: db.集合名.ensureIndex({field.subfield:1/-1}) 如下文档可以建立子文档索引
{name:’诺基亚手机1′,price:12.34,spc:{weight:100,area:’纽约’}}
{name:’诺基亚手机2′,price:42.34,spc:{weight:200,area:’伦敦’}}
比如要查询 weight=100 的文档
db.goods.find({‘spc.weight’:100})
根据当前案例,我们建立子文档索引
db.net.ensureIndex({‘spc.w’:1})
4、唯一索引
语法: db.集合名.ensureIndex({name:-1},{unique:true})
5、查看索引
(1) 查看当前索引状态: db.集合名.getIndexes()
(2) 详情查看本次查询使用哪个索引和查询数据的状态信息: db.集合名.find({name:”xiao}).explain()
6、删除索引
删除单个索引: db.集合名.dropIndex({filed:1/-1})
删除所有索引: db.集合名.dropIndexes()
7、重建索引
一个表经过很多次修改后,导致表的文件产生空洞,索引文件也如此,可以通过QQ索引的重建,减少索引文件碎片,并提高索引的效率,类似 mysql 中的 optimize table 。
mysql 里面使用 optimize table 语法: optimize table 表名
语法: db.集合名.reIndex()
8、索引使用注意事项
(1) 创建索引的时候,注意1是正序创建索引,-1是倒序创建索引
(2) 索引的创建在提高查询性能的同时会影响插入性能,对于经常查询少插入
(3) 复合索引要注意索引的先后顺序
(4) 每个键全建立索引不一定就能提高性能,索引不是万能的。
(5) 在做排序工作的时候如果是超大数据量也可以考虑加上索引用来提高排序的性能。
你还在原价购买阿里云、腾讯云、华为云、天翼云产品?那就亏大啦!现在申请成为四大品牌云厂商VIP用户,可以3折优惠价购买云服务器等云产品,并且可享四大云服务商产品终身VIP优惠价,还等什么?赶紧点击下面对应链接免费申请VIP客户吧:
相关文章
- 振弦采集模块配置工具VMTool通用串口调试模块
- Mysql入门基础,增删改查
- 使用管控平台管理redis集群
- 系统分析师案例必备知识点汇总---2023系列文章四
- 热点综述 | 肿瘤微环境中的细胞间通信推断和分析:数据资源和计算策略
- 故障分析 | 库表名-大小写不规范,运维两行泪
- 空转工具盘点 | 空间转录组细胞类型聚类方法综合比较
- 故障分析 | cassandra 集群数据故障转移
- 技术分享 | MySQL Shell 收集 MySQL 诊断报告(上)
- 超详细 | 生物医学研究和临床应用中scRNA-seq的数据分析指南
- 使用Python+Opencv从摄像头逐帧读取图片保存在本地
- 技术分享 | Redis 持久化之 RDB 与 AOF
- 技术分享 | ClickHouse & StarRocks 使用经验分享
- Redis和MySQL如何保持数据最终一致性
- 01.Java面试都问啥?
- 如何免费系统化入门数据科学?
- 数据仓库(10)数仓拉链表开发实例
- Arcgis中图像裁剪
- ArcGIS如何拼接两张栅格图像
- 前言