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

来源:互联网 发布:iphone高速摄影软件 编辑:程序博客网 时间:2024/06/15 01:17


索引的好处如同一本书的目录,通过目录阅读者不用翻阅全书去定位需要的内容,通过查看目录,需要的章节在哪里便轻松获取。正如数据库索引,select * from table1 where id=10000这样一个sql语句。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),即可在索引中查找。由于索引是经过某种算法优化过的,因而查找次数要少的多。可见,索引是用来定位的。

本篇将介绍mongoDB性能优化,数据库索引的创建和不同索引的应用。

一、建立索引

使用函数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索引的全部内容,在实际应用中,通过建立不同的索引应对不同的业务需求,也许要通过代码写一长串的业务判断,在数据库一层就可以轻松解决。所以合理的数据库设计和数据库应用是一个程序是否灵活的基础。

 

 

0 0
原创粉丝点击