美文网首页
5. 索引操作

5. 索引操作

作者: 简人CC | 来源:发表于2017-09-26 11:37 被阅读0次

在任何的数据库之中, 索引都是一种提升数据库检索性能的手段,这一点在MongoDB数据库之中同样是存在的, 在MongoDB数据库里面依然会存在有2中的索引创建: 是自动创建的, 另外一种索引是手工创建的。

范例: 重新准备一个新的简单集合

db.students.drop()
db.students.insert({"name": "张三", "sex":"男","age": 19, "score": 89, "address": "海淀区"})
db.students.insert({"name": "李四", "sex":"女","age": 20, "score": 59, "address": "朝阳区"})
db.students.insert({"name": "王五", "sex":"女","age": 19, "score": 99, "address": "西城区"})
db.students.insert({"name": "赵六", "sex":"男","age": 20, "score": 100, "address": "东城区"})
db.students.insert({"name": "孙七", "sex":"男","age": 19, "score": 20, "address": "海淀区"})
db.students.insert({"name": "王八", "sex":"女","age": 21, "score": 0, "address": "海淀区"})
db.students.insert({"name": "刘九", "sex":"男","age": 19, "score": 70, "address": "朝阳区"})
db.students.insert({"name": "钱十", "sex":"女","age": 21, "score": 56, "address": "西城区"})

此时在students集合上并没有去设置任何的索引, 那么下面通过getIndexes()函数来观察在students集合里面已经存在的索引内容

db.collections.getIndexes()

现在发现会存在有一个"_id"列的索引内容。但是如果要想创建自己的索引, 则可以使用如下的语法:
索引创建: db.collections.ensureIndex({列: 1})
|- 设置的1表示索引将按照升序的方式进行排列, 如果使用降序设置为"-1"

范例: 创建一个索引, 在age字段上设置一个降序索引;

db.students.ensureIndex({"age": -1})

此时并没有设置索引的名字, 所以名字是自命名的. 命名规范: "字段名称_索引的排序模式"。

范例: 针对于当前的age字段上的索引做一个分析.

db.students.find({"age": 19}).explain()

此时的查询使用了索引的技术, 但是下面再来观察一个查询, 不适用索引字段。

范例: 针对于score字段上的设置查询

db.students.find({"score": {"$gt": 60}}).explain()

此时在score字段上并没有设置索引, 所以当前的索引形式就变成了全集扫描的模式.
但是如果说, 现在换一种形式, 年龄和成绩一起执行判断查询?

db.students.find({"$or": [
  {"age": {"$gt": 19}},
  {"score": {"$gt": 60}}
]}).explain()

这是时候虽然age字段上存在有索引, 但是一个明显的问题, 由于score字段上没有索引, 所以依然使用的是全表扫描功能, 那么为了解决此事的问题,可以使用一个符合索引.

db.students.ensureIndex({"age": -1,"score": -1}, {name: "age_-1_score_-1_index"})

范例: 默认使用索引

db.students.find({"age": 19, "score": 89}).explain()

但是如果换到了条件之中

 db.students.find({
   {"age": {"$gt": 19}},
   {"score': {"$gt": 60}}
 }).explain()

现在发现并没有使用索引, 所以这个时候看能否强制使用一次索引。hint()函数为强制使用索引操作

范例: 强制使用索引

db.students.find({"$or": [
{"age": {"$gt": 19}},
{"score": {"$gt": 60}}
]}).hint({"age": -1, "score": -1}).explain()

如果正常来讲, 这个代码根本就不可能调用默认的索引执行, 但是我们觉得不好, 所以需要使用hint()函数来强制MongoDB告诉你必须使用一次索引, 由于此时在age和score两个字段上已经设置了复合索引,那么现在使用的就是默认的复合索引.

但是如果在一个集合里面设置了太多的索引, 实际上会导致性能下降, 那么就可以删除索引.

范例: 删除一个索引

db.students.dropIndex({"age": -1, "score": -1})

可是如果只是一个一个删除索引也会很麻烦, 所以提供有删除全部索引的操作.

范例: 删除全部索引

db.students.dropIndexes()

所谓的删除全部索引指的就是非"_id"的索引,所有的自定义索引.

5.1

相关文章

  • 5. 索引操作

    在任何的数据库之中, 索引都是一种提升数据库检索性能的手段,这一点在MongoDB数据库之中同样是存在的, 在Mo...

  • day06

    6.7 索引的操作管理 1.添加索引 2.查看索引 3.创建唯一索引 4.创建前缀索引 5.创建联合索引 6.删除...

  • es常用命令小结

    查看索引 删除索引 操作索引

  • MySQL索引类型

    MySQL的索引类型: 1.普通索引 2.唯一索引 3.主键索引 4.组合索引 5.全文索引 普通索引 ind...

  • Pandas层次化索引

    一、创建多层索引 二、多层索引对象的索引与切片操作 三、索引的堆(stack) 四、聚合操作

  • 【转】MySQL索引操作命令小结

    MySQL索引操作命令小结 这篇文章主要介绍了MySQL索引操作命令小结,本文讲解了创建索引、查询索引、删除索引等...

  • MySQL操作索引

    MySQL操作索引 增加普通索引 增加唯一索引 删除索引

  • 1-4 5.6.9ES的API操作

    索引操作 创建索引 查询索引信息 创建索引并建立映射 查看索引类型和映射 文档操作 向user中插入文档 修改文档...

  • 24.Mongodb的索引操作

    Mongodb的索引操作 学习目标 掌握 mongodb索引的创建,删除操作 掌握 mongodb查看索引的方法 ...

  • Pandas数据操作

    Pandas数据操作 Series索引 行索引 切片索引 不连续索引 布尔索引 DataFrame索引 列索引 不...

网友评论

      本文标题:5. 索引操作

      本文链接:https://www.haomeiwen.com/subject/pgqsextx.html