MongoDB性能——索引
2015-07-04 12:48
609 查看
索引用来加速查询。哪些内容需要快速查找就可以在那个字段上创建索引。
1.基础索引
对某个键建立索引:
// _id是创建表时自动建立的,不能删除,当有大量数据时,创建索引是个非常耗时的操作,可以指定在后台执行:
2.文档索引
3.组合索引
4.唯一索引
5.强制使用索引
6.索引内嵌文档中的键
给内嵌文档的键创建索引和普通的键创建索引没有什么区别
7.索引名称
集合中每个索引都有一个字符串类型的名字,来唯一标识索引,类似于:keyname1_dir1的形式,keynameX是索引的键,dirX是索引的方向(1或者-1),键多则不合适,通过自定义名字:
8.删除索引
查出的代码说明:
curson:表示了使用的索引名
nscanned:代表数据库查找了多少个文档
n:返回文档数量
millis:查询时间
indexBounds:当前使用的索引
1.开启profiler功能:
①在启动时,加上–profile参数
②客户端使用db.setProfilingLevel()方法,传入一个参数表示profiler的级别,profiler的信息被保存在system.profile中,如果要获得当前的profiler级别,使用db.getProfilingLevel()获取。
参数介绍:
1:不开启
2:记录慢命令(默认大于100ms),可以启动时用–slowms设置默认值
3:记录所有命令
2.查询profiler日志
查询的结构参数说明
ts:何时执行的命令
info:命令详细信息
reslen:返回结果集大小
nscanned:本次查询扫描的记录数
nretured:本次查询实际返回的结果集
millis:执行耗时
一. 简介
MongoDB数据库在创建集合时默认_id创建索引,也提供多样性索引支持,索引信息都保存在system.indexes中。1.基础索引
对某个键建立索引:
>db.users.endureIndex({" username " : 1}) //1表示升序,-1降序 >db.users.getIndexes() //查询索引
// _id是创建表时自动建立的,不能删除,当有大量数据时,创建索引是个非常耗时的操作,可以指定在后台执行:
>db.users.ensureIndex({" username " : 1}, {" background : true "})
2.文档索引
>db.users.insert({"username":"zouguijin", "address":{"city":"shenzhen", "state":"SZ"}}) >db.users.ensureIndex({"address" : 1}) // address是文档参数被传入,查询时: >db.users.find({"address":{"city":"shenzhen","state":"SZ"}}) //可以用索引查询 >db.users.find({"address":{"state":"SZ"," city":"shenzhen"}}) //不可以用索引,因为查询顺序和索引建立顺序不一样
3.组合索引
>db.users.ensureIndex({"address.city" : 1, "address.state" : 1})
4.唯一索引
>db.users.ensureIndex({"username" : 1}, {"unique" : true }) //保证username的每个值都不一样,在创建时有重复的值会报错
5.强制使用索引
>db.users.find({"age":{"$lt":29}}).hint({"name":1,"age":1}).explain() //hint指定必须用索引查询,explain查询所用到的索引
6.索引内嵌文档中的键
给内嵌文档的键创建索引和普通的键创建索引没有什么区别
>db.user.ensureIndex({"address.city" : 1 }) //city是内嵌在address中的键
7.索引名称
集合中每个索引都有一个字符串类型的名字,来唯一标识索引,类似于:keyname1_dir1的形式,keynameX是索引的键,dirX是索引的方向(1或者-1),键多则不合适,通过自定义名字:
>db.users.ensureIndex({"username" : 1}, {"name":"indexusername"}) //索引名有字符个数限制,所以在创建自定义索引名时,可以用getLastError来检查索引是否创建成功
8.删除索引
>db.users.dropIndex("address_1") //删除指定索引 >db.users.dropIndex() //删除除了_id以外的所有索引,_id删不掉
二. explain执行计划
使用explain可以得到当前查询使用的索引、消耗了多少时间,以及数据库需要扫描多少文档才能得到结果>db.users.find({"age":"26"}).sort({"username":1}).explain()
查出的代码说明:
curson:表示了使用的索引名
nscanned:代表数据库查找了多少个文档
n:返回文档数量
millis:查询时间
indexBounds:当前使用的索引
>db.system.indexs.find({"name":"username_1"}) //可以查看username_1索引的信息
三. 优化器profiler
在MySQL中,可通过慢查询日志来作为优化数据库的依据,而MongoDB用profiler可获得更详细的信息1.开启profiler功能:
①在启动时,加上–profile参数
②客户端使用db.setProfilingLevel()方法,传入一个参数表示profiler的级别,profiler的信息被保存在system.profile中,如果要获得当前的profiler级别,使用db.getProfilingLevel()获取。
>db.setProfilingLevel(2)
参数介绍:
1:不开启
2:记录慢命令(默认大于100ms),可以启动时用–slowms设置默认值
3:记录所有命令
2.查询profiler日志
>db.system.profiler.find({millis : {$gt : 5}}) //查询执行时间大于5ms的profiler日志 >db.system.profiler.find().sort({$nature:-1}).limit(1) //查询最新的日志
查询的结构参数说明
ts:何时执行的命令
info:命令详细信息
reslen:返回结果集大小
nscanned:本次查询扫描的记录数
nretured:本次查询实际返回的结果集
millis:执行耗时
>show profile //使用shell直接查看日志
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- PHP添加yaf xhprof mongodb 同理
- mongodb安装
- 如何在 Ubuntu 上安装 MongoDB
- 计算机信息处理
- perl操作MongoDB报错undefined symbol: HeUTF8解决方法
- AVG 7.5.1.43 版本 序列号 集合
- SQL Server游标的使用/关闭/释放/优化小结
- 解析MYSQL显示表信息的方法
- C#检查指定对象是否存在于ArrayList集合中的方法
- C#中使用1.7版本驱动操作MongoDB简单例子
- MongoDB系列教程(四):设置用户访问权限
- Linux系统下php获得系统分区信息的方法
- C#实现为类和函数代码自动添加版权注释信息的方法
- C/C++实现对STORM运行信息查看及控制的方法
- C#中的集合用法分析
- C#获得文件属性信息的实现方法
- C#获取程序文件相关信息的方法
- JavaScript Archive Network 集合
- php实现的mongodb操作类实例