【Mongodb】Mongodb的联合索引与内嵌索引

【Mongodb】Mongodb的联合索引与内嵌索引

导读:

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。索引有诸多优点如,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性; 可以大大加快数据的检索速度,当然使用索引时也存在一些不可避免的问题,本文不在此权衡,下面着重介绍以实验的形式两种常用的常见的索引。

实验条件:


集合中的数据量约500万条
集合存储结构 {
         “_id” : ObjectId(“54f12a2e46595fd917542d92”),
         “code” : “test0”,
         “age” : 28,
         “dog” : { “name”:”d0”}
       }
Mongodb的版本为32位linux版

必备知识:

查询索引 db.users.getIndex();
增加索引 db.users.ensureIndex({});
删除索引 db.users.dropIndex({});
使用索引 db.users.find({}).expalin();

explain会返回查询使用的索引情况,耗时和扫描文档数的统计信息。
“cursor”:”BasicCursor”表示没有使用索引。
“nscanned”:1 表示查询了多少个文档。
“n”:1 表示返回的文档数量。
“millis”:0 表示整个查询的耗时。

实验论证:

1.在联合索引的情况下,查询条件与索引部分相同时索引能否生效
2.嵌入文档的索引在查询时能否起到辅助作用

实验步骤一:


1.验证当前集合中的数据量

2.不使用索引直接查询,此时的执行计划

全表扫描,耗时9223毫秒
3.建立联合索引

4.查询条件与索引完全相同时进行查询,此时的执行计划

开始使用B树索引,此时查询耗时仅为1毫秒
5.查询条件与索引部分相同时进行查询,此时的执行计划


只要查询中含有任一与索引相同的条件时,联合索引在查询时都会生效

实验结论一:

在联合索引的情况下,查询条件与索引部分相同时,索引会生效

实验步骤二:


1.不使用索引直接查询,此时的执行计划

全表扫描,耗时39062毫秒
2.建立内嵌索引

3.查询条件与内嵌索引相同时进行查询,此时的执行计划

使用B树索引,查询时间为0毫秒

实验结论二:

嵌入文档的索引在查询时能起到辅助作用

_

版权声明:自由转载-非商用-衍生-保持署名(创意共享3.0许可证)
引用列表:
http://www.cnblogs.com/stephen-liu74/archive/2012/08/01/2561557.html
http://docs.mongodb.org/manual/core/query-optimization/
_

your support will encourage me to continue to create!
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)