您的位置:首页 > 数据库 > Mongodb

mongoDB性能篇——mongoDB数据库索引

2016-01-11 11:05 344 查看


索引的好处如同一本书的目录,通过目录阅读者不用翻阅全书去定位需要的内容,通过查看目录,需要的章节在哪里便轻松获取。正如数据库索引,select * from table1 where id=10000这样一个sql语句。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),即可在索引中查找。由于索引是经过某种算法优化过的,因而查找次数要少的多。可见,索引是用来定位的。
本篇将介绍mongoDB性能优化,数据库索引的创建和不同索引的应用。
[b]一、建立索引[/b]
使用函数ensureIndex()创建索引,形如:在persons集合中name列创建索引;
Db.persons.ensuereIndex({name:1});
当系统数据较大时,可通过background属性在后台执行索引创建命令以节约时间。
Db.persons.ensuereIndex({name:1},{background:true});
二、查看索引
Db.collectionName.getIndexs();可查看索引名和索引值;
三、删除索引
Db.persons.dropIndex()//删除所有索引
Db.persons.dropIndex({name:1})//删除persons结合中name列的索引
四、explain命令
mongoDB提供了一个explain命令,观察执行查询等操作耗时和遍历行数信息。
Db.c1.find({name:”user5”}).explain();


 
五、索引的种类
1、_id索引
_id索引是绝大多数集合默认创建的索引,对于每一条插入的数据,MongoDB都会自动生成一条唯一的_id字段
2、单键索引
 索引值为一个单一的值,例如字符串、数据、时间等,例如记录形如:db.collectionName.ensureIndex({x:1}) ,为x创建索引,值为1
3、多键索引
索引值具有多个记录,例如数组
4、复合索引
当查询条件不止一个时,就需要创建符合索引
db.collectionName.ensureIndex({x:1,y:1})
查询时,根据复合索引查询x:1,y:2的记录
db.collectionName.find({x:1,y:2})
5、过期索引
过期索引是指在一段时间之后索引会过期,也就是说,当索引过期后,对应的数据也会被删除。例如一些用户登录信息、日志记录等就比较适合创建过期索引。
db.testImage.ensureIndex({time:1},{expireAfterSeconds:10}) ,
为testImage集合创建时间过期【1表示true】,10秒之后过期的索引。也就是说10秒之后,testImage集合中的数据将会被删除。
6、全文索引
顾名思义,全文索引应用于,例如一篇文章的全文搜索,查找含有“作者”这类字眼的段落等;通过作者为“”,标题为“”进行查询。
6.1创建全文索引
db.articles.ensureIndex({author:”Marz”});
6.2使用全文索引进行查询
Db.articles.find({$text:{$search:”coffee”}});
Db.articles.find({$text:{$search:”\”aa\” bb cc” }});
注意:在MongoDB中,一个数据集合只允许创建一个全文索引。
6.3 全文索引相似度 score
在百度搜索中,搜索内容越相似的,结果排在最前。这就是全文索引相似度的应用。
{score:{$meta:”textScore”}}
具体使用:
db.articles.find({$text:{$search:”coffee”}},{score:{$meta:”textScore”}}).sort(score:{$meta:”textScore”});
相似度得分进行排序,越高的排名越前。
7、地理位置索引
将一些点的位置存储在MongoDB中,创建地理位置索引后,可按照地理位置来查找其他点。例如我们手机app的百度地图、美团定位当前位置,搜索附近餐馆、滴滴打车应用,均可以使用地理位置索引查询。
7.1创建方式:
db.collection.ensureIndex({w:”2d”}) //平面地理位置索引。计算两点距离
位置表示方式:经纬度【经度,纬度】
取值范围:经度【-180,180】,纬度【-90,90】
Db.location.insert({w:[100,60]})
Db.location.find({w:{$near:[99,60]}})//查询离99,60最近的点
Db.location.find({w:{$near:[99,60]},$maxDistance:10})//查询离99,60最大距离不超过10m的点。
 
以上就是关于MongoDB索引的全部内容,在实际应用中,通过建立不同的索引应对不同的业务需求,也许要通过代码写一长串的业务判断,在数据库一层就可以轻松解决。所以合理的数据库设计和数据库应用是一个程序是否灵活的基础。
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: