Mongodb学习笔记(四):索引

  • ensureIndex
  • 加快查询,插入更新删除会产生额外开销
  • 对一个查询包含的所有键建立索引才有效果,部分包含让无效
  • 索引 {“a”:1, “b”:1, …, “z”:1}, 对 {“b”:1}, {“a”:1, “c”:1} 这样的查询无效,只有使用索引前部的查询才有效。
  • 建立索引时要考虑的问题:
    • 会做怎样的查询,其中哪些键需要索引?
    • 每个键的索引方向是怎样的?
    • 如何应对扩展,有没有一种不同的键的排列可以使常用数据更多地保留在内存中?
  • 索引内嵌文档中的键,为排序创建索引
  • 索引名称(默认,自定义)
  • 唯一索引 {“unique”: true}
    • 消除重复 {“unique”: true, “dropDups”: true}
    • 复合唯一索引 (单键可以重复,只要复合的不重复就可以)
  • 使用 explain 查看使用的索引、耗时等,以及尝试使用的索引等
  • 用 hint 强制指定使用某个索引进行查询
  • 索引信息保存在 system.indexes 中,它是一个保留集合,不能插入或删除,只能用 ensureIndex 或者 dropIndexes 进行
  • 使用 {“background”: true} 可以让建立索引过程在后台完成,否则会阻塞正常的数据库请求。阻塞其他请求可以让建立索引变得快一些。
  • 地理空间索引
    • ensureIndex 参数不是 1 或 -1,而是 “2d”
    • 该种类的索引的键对应的值必须是一对值,如 [0, 100], {“x”: -30, “y”: 30} 之类的
    • 建立索引时可以使用 min, max 来指定范围
    • 查询使用 $near 来查找最近的文档,加 limit 可以返回最近的 n 个文档。 也可以使用 geoNear 来完成
    • $within 指定范围查找, $box 返回指定两个顶点的矩形范围内的文档, $center 指定圆心和半径