MongoDB索引的使用

语法

  • 创建索引语法:db.集合名.createIndex(待创建索引的列 [,额外选项])
  • 参数:

待创建索引的列:{键:1,...,键:-1}
说明:1升序 -1降序 例如{age:1}表示创建age索引并按照升序的方式存储
额外选项:设置索引的名称或者唯一索引等等

  • 删除索引语法:

全部删除:db.集合名.dropIndexes()

删除指定:db.集合名.dropIndex(索引名)

  • 查看索引语法:db.集合名.getIndexes()

练习

准备:向数据库中新增十万条数据

//选择数据库
use test5;
//向数据库中添加数据
for(var i=0;i<100000;i++){
db.c1.insert({'name':"aaa"+i,"age":i});
}

创建普通索引

需 求:给name添加普通索引

练习1:给name添加普通索引,命令:db.c1.createIndex({name:1})

练习2:删除name索引,命令:db.c1.dropIndex('name_1')

练习3:给name创建索引并起名webopenfather

命令:db.c1.createIndex({name:1}, {name: "webopenfather"})

创建复合/组合索引

需求:给name和age添加组合索引

说明:就是一次性给两个字段建立索引

语法:db.集合名.createIndex({键1:方式,键2:方式})

创建唯一索引

需 求:给name添加普通索引

语 法:db.集合名.createIndex(待添加索引的列, {unique: 列名})

练习1:删除全部索引,命令:db.c1.dropIndexes();

练习2:设置唯一索引,命令:db.c1.createIndex({name:1}, {unique: "name"})

练习3:测试唯一索引特性,

命 令:
db.c1.insert({name: "a"});
db.c1.insert({name: "a"});

分析索引(explain)

  • 语法:db.集合名.find().explain('executionStats')

  • 说明:

COLLSCAN 全表扫描
IXSCAN 索引扫描
FETCH 根据索引去检索指定document

  • 练习

测试:age未添加索引情况
语法:db.c1.find({age:18}).explain('executionStats');

测试:age添加索引情况
语法:db.c1.createIndex({age: 1})
继续:db.c1.find({age:18}).explain('executionStats')

选择规则(如何选择合适的列创建索引)

-为常做条件、排序、分组的字段建立索引
-选择唯一性索引 (ps. 同值较少如性别字段)
-选择较小的数据列,为较长的字符串使用前缀索引 (ps. 索引文件更小)

posted @ 2020-09-20 01:17  sewen  Views(300)  Comments(0)    收藏  举报