【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/
_