MongoDB之索引
MongoDB之索引
入门:https://blog.****.net/sinat_32366329/article/details/81591915
查询:https://blog.****.net/sinat_32366329/article/details/81784562
聚合查询:https://blog.****.net/sinat_32366329/article/details/82080900
简介
索引就是用来加速查询的。数据库索引和书籍的索引类似:通过索引我们可以快速查找到书本内容。那么索引的好坏就决定了查找速度。好的数据库索引可以使得T级别数据查询提升几个数量级。在索引中找到条目的位置后,直接跳转到目标文档的位置。
集合创建命令对于同一个集合,同样的索引只需要创建一次。
为内嵌文档的键创建索引
内嵌文档键索引的创建和普通的索引创建是一样的。
通过索引优化排序
如果查询集合的时候,没有对索引的键调用sort,那么MongoDB需要将所有数据提取到内存中排序。因此,由于内存有限,不可能在内存中做T级别的数据排序,一旦集合大到不能在内存中排序,MongoDB就会报错。
索引名称
集合中的每个所有都有一个唯一的字符串名称,服务器通过名称来删除或者操作索引。默认情况索引名称为:key1_dir1_key2_dir2......keyn_dirn这个索引的名称默认为:username_1。索引的名称长度是有限制的,如果创建复合索引有可能会超出范围。自定义索引名称:
唯一索引
唯一索引,可以确保集合的每个文档的指定键都有唯一值。例如想保证文档的username键都有不一样的值,创建一个唯一索引就可以解决:。Insert的时候文档不检查是否插入过,如果插入一样的值,那么就会提示重复键错误。所以,如果创建了唯一索引,可能要用安全插入才能满足要求。
如果插入的是没有唯一索引的键值,那么会将其设置为null。如果插入多个缺少该索引键的文档,则由于文档包含null值而导入插入失败。
消除重复
如果集合已经存在,并且某些值已经有重复出现,那创建唯一索引的时候就会失败。但是可以通过指定消除重复来删除重复的索引文档。默认值保留第一个文档,其他重复的键的文档都会被删除。讲义不要用这些做法,为了避免你的数据混乱或丢失。
分析索引性能
explain是分析索引性能非常有用的工具。可以获取文档方面诸多有用的信息。explain会返回查询使用的索引情况,耗时以及扫描文档数的统计信息。
这里的查询要求精确匹配用户名和年龄范围,所有数据库使用了{“username” : 1, “age” : 1}索引,而自己调换了查询项的顺序。
地理空间索引
请查找用户当前位置最近的N个某场所。MongoDB为坐标平面查询提供了专门的索引,也就是地理空间索引。创建地理空间索引参数不是1或者-1,而是2d。
,对于地理空间索引的值是一个包含两个元素的数组或者是包含两个键的内嵌文档。例如:
地理空间的方式
- 普通查询$near
这样会按照距离(40, -73)由近到远的方式将map集合的所有文档都返回。
- geoNear
geoNear指定要查询的结婚,near指定坐标,num指定要返回的文档数量。
- 矩形内的坐标$box
$box参数是两个元素的数组,第一个元素指定了左下角的坐标,第二个指定了右上角的坐标。
- 当前位置指定范围的圆$center
$center数组第一个参数指定了中心坐标,第二个参数指定了圆的半径。
官网索引介绍:https://docs.mongodb.com/manual/indexes/