3.3 单字段索引
3.3.1 了解单字段索引
- MongoDB默认为所有集合都创建了一个 _id字段的单字段索引,而且这个索引是唯一的,不能删除 ;
- _id字段作为一个集合的主键,值是唯一的;
- 对于一个集合来说,也可以在其他字段上创建单字段的唯一索引;
3.3.2 创建单字段索引准备工作
准备测试数据:
for(var i=1;i<10;i++) db.customers.insert({name:"jordan"+i,country:"American"})
for(var i=1;i<10;i++) db.customers.insert({name:"gaga"+i,country:"American"})
for(var i=1;i<10;i++) db.customers.insert({name:"ham"+i,country:"UK"})
for(var i=1;i<10;i++) db.customers.insert({name:"brown"+i,country:"UK"})
for(var i=1; i<10; i++) db.customers.insert({name:"ramda"+i, country:"Malaysia"})
注:删除上一章添加的customers数据
3.3.3 创建单字段唯一索引
-
db.customers.createIndex({name:1},{unique:true})
-
索引创建成功后可通过如下语句查询增加的索引:
db.customers.getIndexes()
v表示索引的版本; key表示索引建立在哪个字段上; 1表示索引按照升序排列; ns索引所在的命名空间
效果如图
- 索引查询效率分析
db.customers.find({name:"ramda9"}).explain("executionStats") //使用索引字段作为查询选择器
db.customers.find({country:"Malaysia"}).explain("executionStats") //不使用索引字段作为查询选择器
使用索引:
不使用索引:
totalKeysExamined:遍历索引的次数 totalDocsExamined:遍历文档的次数 executionTimeMillis:预测需要执行的时间