mongodb 查询5分钟前数据:mongodb索引--1亿条记录的查询从55.7秒到毫秒级别

mongodb 查询5分钟前数据:mongodb索引--1亿条记录的查询从55.7秒到毫秒级别(1)

从头开始,验证mongodb的索引的好处。(window7环境下)

1 下载mongodb服务器,并解压到d盘,并使用以下命令启动

mongod --dbpath D:\MongoDB\data

2 mongo客户端Robo 3T 去官网下载,安装

3 准备数据,条数为1亿

public static void main(String[] args) { try { /**** Connect to MongoDB ****/ // Since 2.10.0, uses MongoClient MongoClient mongo = new MongoClient("localhost", 27017); /**** Get database ****/ // if database doesn't exists, MongoDB will create it for you DB db = mongo.getDB("www"); /**** Get collection / table from 'testdb' ****/ // if collection doesn't exists, MongoDB will create it for you DBcollection table = db.getCollection("person"); /**** Insert ****/ // create a document to store key and value BasicDBObject document=null; for(int i=0;i<100000000;i ) { document = new BasicDBObject(); document.put("name", "mkyong" i); document.put("age", 30); document.put("sex", "f"); table.insert(document); } /**** Done ****/ System.out.println("Done"); } catch (UnknownHostException e) { e.printStackTrace(); } catch (MongoException e) { e.printStackTrace(); } }

4 获取索引情况

mongodb 查询5分钟前数据:mongodb索引--1亿条记录的查询从55.7秒到毫秒级别(2)

5 根据姓名查询一条记录

mongodb 查询5分钟前数据:mongodb索引--1亿条记录的查询从55.7秒到毫秒级别(3)

6 根据姓名创建索引

创建索引的时间稍微有点长,请耐心等待

db.person.createIndex({name:1})

mongodb 查询5分钟前数据:mongodb索引--1亿条记录的查询从55.7秒到毫秒级别(4)

7 索引情况

mongodb 查询5分钟前数据:mongodb索引--1亿条记录的查询从55.7秒到毫秒级别(5)

8 再一次查询

mongodb 查询5分钟前数据:mongodb索引--1亿条记录的查询从55.7秒到毫秒级别(6)

索引说明:

索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。

这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。

索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。

http://www.runoob.com/mongodb/mongodb-indexing.html

createIndex() 方法

MongoDB使用 createIndex() 方法来创建索引。

注意在 3.0.0 版本前创建索引方法为 db.collection.ensureIndex(),之后的版本使用了 db.collection.createIndex() 方法,ensureIndex() 还能用,但只是 createIndex() 的别名。

语法

createIndex()方法基本语法格式如下所示:

>db.collection.createIndex(keys, options)

语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。

实例

>db.col.createIndex({"title":1}) >

createIndex() 方法中你也可以设置使用多个字段创建索引(关系型数据库中称作复合索引)。

>db.col.createIndex({"title":1,"description":-1}) >

createIndex() 接收可选参数,可选参数列表如下:

ParameterTypeDescriptionbackgroundBoolean建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false。uniqueBoolean建立的索引是否唯一。指定为true创建唯一索引。默认值为false.namestring索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。dropDupsBoolean3.0 版本已废弃。在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.sparseBoolean对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.expireAfterSecondsinteger指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。vindex version索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。weightsdocument索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。default_languagestring对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语language_overridestring对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.

实例

在后台创建索引:

db.values.createIndex({open: 1, close: 1}, {background: true})

通过在创建索引时加 background:true 的选项,让创建工作在后台执行

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页