关于mongodb索引优化的实现与思考
来源:互联网 发布:足球 知乎 编辑:程序博客网 时间:2024/05/22 17:19
一千万条数据,查询频率最高的查询语句如下
db.comment.find({'accountId':48,'rootId':3745809,'type':140,'status':12}).limit(1).explain()
db.comment.find({'rootId':707629,'type':40,'status':0}).sort({'commentId':-1}).limit(1).explain()
db.comment.find({'accountId':49,'rootId':495802,'type':140,'status':11}).limit(20).explain()
db.comment.find({'rootId':995691,'status':0,'commentId':{$lt:10269000}}).sort({'commentId':-1}).limit(20).explain()
db.comment.find({'rootId':995691,'type':10,'status':{$lt:10}}).sort({'commentId':-1}).explain()
db.comment.find({'accountId':717252,'currBoardId':4666235,'status':11,'createTime':{$lt:'2013-09-09 08:38:00',$gt:'2013-09-09 08:38:50'}}).limit(1).explain()
现要对以上语句建立索引,而且不能太多,不然插入数据时会很慢。
我的思路:
一,找出这些语句中80%以上会出现的字段,分别为rootId,accountId,type,status,commentId
二,分析这些字段所在的查询语句的共同与不同之处,分析后发现,这些语句可以分为两类,即以accountId开头的和以rootId开头的,于是,索引就出来了:
{ "accountId" : 1, "status" : 1, "rootId" : -1, "type" : 1 }
{ "status" : 1, "rootId" : -1, "commentId" : -1, "type" : 1 }
在建索引时,并不是要给查询语句中的没一个字段都能是有意义的索引,如果某个字段没有建索引,但是所在的查询语句中的其它字段建了组合索引,那就不需要在建这个索引了,除非其它字段的组合索引的威力没有这一个字段的索引大时才考虑再加上。
顺便说一下,如果你的查询语句是这几个字段,那么索引字段的顺序在Mongodb的2.0后就没有区别了。
- 关于mongodb索引优化的实现与思考
- MongoDB的索引与查询优化
- 关于索引的思考
- MongoDB组合索引的优化
- MongoDB组合索引的优化
- mongodb索引优化的方法
- MongoDB组合索引的优化
- MongoDB组合索引的优化
- MongoDB 关于索引的建议
- 精通MongoDB-索引与查询优化
- 关于like的优化思考
- 关于性能优化的思考
- MongoDB范围查询的索引优化
- MongoDB范围查询的索引优化
- MongoDB 索引的使用, 管理 和优化
- MongoDB范围查询的索引优化
- MongoDB范围查询的索引优化
- 关于MongoDB安全事件的一些思考
- 以太网协议------802.1q,802.1d,802.1x
- Repeater嵌套Repeater及Repeater嵌套table,单击行查看详细信息,适用于DataLsit
- Reading notes of OS Security
- Delphi代码页和设计页的作用问题。
- 设置双核浏览器的浏览模式
- 关于mongodb索引优化的实现与思考
- DWR中获取Session,Request,Response等信息
- 堆排序 java
- 中断线程
- mysql联结操作符
- 学习ExtJS Window常用方法
- OpenGL框架
- struts2的完整的struts.xml骨架
- Difference between login and non-login shell