Mongodb数据库的索引操作(建立索引注意点)

本文详细介绍了MongoDB索引的作用、创建简单和唯一索引的方法,通过实操演示了创建索引前后查询速度的变化,并探讨了索引选择、查看与删除技巧。针对复合索引和注意事项进行了讲解,帮助理解何时何地最适合使用索引来优化查询性能。
摘要由CSDN通过智能技术生成

Mongodb的索引操作

1.为什么mongdb需要创建索引

  • 加快查询速度
  • 进行数据的去重

2.mongodb创建简单的索引方法
语法:db.集合名.ensureIndex({属性:1}),1表示升序, -1表示降序

3.创建索引前后查询速度对比
测试:插入10万条数据到数据库中
插入数据:

for(i=0;i<100000;i++){db.t1.insert({name:'test'+i,age:i})}

创建索引前:

db.t1.find({name:'test10000'})
db.t1.find({name:'test10000'}).explain('executionStats') # 显示查询操作的详细信息

创建索引:

db.t1.ensureIndex({name:1})

创建索引后:

db.t1.find({name:'test10000'}).explain('executionStats')

前后速度对比
明显可以看出创建索引后的查询效率远远高于未创建索引时。
查询速度对比

4. 索引的查看
默认情况下_id是集合的索引
查看方式:db.集合名.getIndexes()

5.删除索引
语法:db.集合名.dropIndex({‘索引名称’:1})

db.t1.dropIndex({name:1})
删除后再来查看,索引已经不存在了
db.t1.getIndexes()

6.mongodb创建唯一索引
在默认情况下mongdb的索引域的值是可以相同的,创建唯一索引之后,数据库会在插入数据的时候检查创建索引域的值是否存在,如果存在则不会插入该条数据,但是创建索引仅仅能够提高查询速度,同时降低数据库的插入速度。

6.1 添加唯一索引的语法:
db.集合名.ensureIndex({“字段名”:1}, {“unique”:true})

6.2 利用唯一索引进行数据去重
根据唯一索引指定的字段的值,如果相同,则无法插入数据

db.t1.ensureIndex({“name”:1}, {“unique”:true})
db.t1.insert({name: ‘test10000’})

注意:如果在创建唯一索引之前,该字段已经有重复的信息,则会创建失败。

7.建立复合索引
在进行数据去重的时候,可能用一个域来保证数据的唯一性,这个时候可以考虑建立复合索引来实现。

例如:抓全贴吧信息,如果把帖子的名字作为唯一索引对数据进行去重是不可取的,因为可能有很多帖子名字相同

建立复合索引的语法:db.collection_name.ensureIndex({字段1:1,字段2:1})

8.建立索引注意点
根据需要选择是否需要建立唯一索引
索引字段是升序还是降序在单个索引的情况下不影响查询效率,但是带复合索引的条件下会有影响
数据量巨大并且数据库的读出操作非常频繁的时候才需要创建索引,如果写入操作非常频繁,创建索引会影响写入速度

例如:在进行查询的时候如果字段1需要升序的方式排序输出,字段2需要降序的方式排序输出,那么此时复合索引的建立需要把字段1设置为1,字段2设置为-1

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值