Step into MongoDB - 09 - 索引
2015-04-23 14:48
288 查看
目录
索引
特点
何时使用索引
默认索引
单列索引
组合索引
唯一索引
删除索引
删除单个索引
删除所有索引
查询索引
查询所有索引
查询指定集合的索引
explain 和 hint
explain
hint
索引管理
地理空间索引
建立索引
near
geoNear
within
概述
box
center
注意事项
系统剖析器 System Profiler
级别
设置级别
查询记录
摘要
默认索引,单列索引,指定索引名,索引方向,组合索引,唯一索引(重复值),后台创建索引,删除单个索引,删除所有索引,查询所有索引,查询指定集合的索引,exxplain,hint,建立地理位置索引,near,geoNear,within(box,center),系统剖析器
当查询仅使用一个键时
第二个参数为可选,表示索引名。
返回的结果
nscanned 查询了多少文档
n 返回的文档数
millis 查询耗时
在
为已有文档创建索引比创建索引后再插入所有文档要稍快
可以查看所有索引是否都在内存中。
其中
默认的,MongoDB 假设你索引的是经度/维度,因此配置了一个从 “-180” 到 “180” 的取值范围。要想改变的话需要修改
不指定
参数为闭区间
参数为圆心及半径
如果常常需要查询一半以上的集合,那么表扫描可能比索引要快。
级别 2 保留所有查询
设置级别后需要保留的查询会被保留在
索引
特点
何时使用索引
默认索引
单列索引
组合索引
唯一索引
删除索引
删除单个索引
删除所有索引
查询索引
查询所有索引
查询指定集合的索引
explain 和 hint
explain
hint
索引管理
地理空间索引
建立索引
near
geoNear
within
概述
box
center
注意事项
系统剖析器 System Profiler
级别
设置级别
查询记录
摘要
默认索引,单列索引,指定索引名,索引方向,组合索引,唯一索引(重复值),后台创建索引,删除单个索引,删除所有索引,查询所有索引,查询指定集合的索引,exxplain,hint,建立地理位置索引,near,geoNear,within(box,center),系统剖析器
索引
特点
优化查找,插入会略慢何时使用索引
当查询条件总是带有某一个键时当查询仅使用一个键时
默认索引
在创建任何一个集合时,Mongo 会自动在_id上建立索引。
单列索引
db.test.ensureIndex( { "x" : 1 } , { "name" : "x_inx" } )
1或
-1表示索引方向,多个键上建立索引时需要考虑索引方向。
第二个参数为可选,表示索引名。
组合索引
db.test.ensureIndex( { "x" : 1, "y" : -1 } )
唯一索引
db.phones.ensureIndex( { display : 1 }, { unique : true, dropDups : true} )
dropDups表示删除重复值,在创建唯一索引时非常有用,否则的话一旦当前集合中该列有重复数据则会创建失败。
background表示在后台创建索引,产品环境时应该这么做。
background : 1。
删除索引
删除单个索引
db.test.dropIndex( { "x" : 1 } )
删除所有索引
db.test.dropIndexes()
查询索引
查询所有索引
db.system.indexes.find()
查询指定集合的索引
db.test.getIndexes()
explain 和 hint
explain
explain用于游标上,返回一个文档而不是游标,其会返回查询的使用情况
db.test.find ( { "x" : { $exists : 1 } } ).explain()
返回的结果
cursor是否使用索引,值为
BasicCursor就是没有使用索引
nscanned 查询了多少文档
n 返回的文档数
millis 查询耗时
hint
hint用于强制使用索引,大部分情况下没有必要
db.test.find ( { "x" : { $exists : 1 } } ).hint( { "x" : 1} )
索引管理
索引的元信息都被保存在system.indexes集合中,这是一个只读集合
在
system.namespaces为每一个集合保留两个文档,一个对应集合本身,一个对应集合的索引
为已有文档创建索引比创建索引后再插入所有文档要稍快
db.comments.totalIndexSize()
可以查看所有索引是否都在内存中。
地理空间索引
建立索引
db.test.ensureIndex( { "mygps" : "2d" } )
其中
mygps键对应的值必须是键值对,如 “[10, 20]” 或 “{“x” : 30, “y” : -30}”。
默认的,MongoDB 假设你索引的是经度/维度,因此配置了一个从 “-180” 到 “180” 的取值范围。要想改变的话需要修改
ensureIndex第二个参数。
db.places.ensureIndex( { loc : "2d" } , { min : -500 , max : 500 } )
$near
db.test.find( { "gps" : { $near : [ 20, 20 ] } } )
不指定
limit的情况下,默认返回由近到远的的 100 个文档。
geoNear
geoNear同时会返回到查询点的距离,距离的单位与插入的数据有关
db.runCommand( { geoNear: "test", near: [40, -73], num: 100})
$within
概述
$within用于查询指定形状。
$box
矩形db.test.find( { "gps" : { $within : { $box : [ [5, 5], [20, 20] ]} } } )
参数为闭区间
$center
圆形db.test.find( { "gps" : { $within : { $center : [ [5, 5], 30 ]} } } )
参数为圆心及半径
注意事项
默认每个集合的最大索引数为 64 个。如果常常需要查询一半以上的集合,那么表扫描可能比索引要快。
系统剖析器 System Profiler
级别
级别 1 保留超过 100 毫秒的查询级别 2 保留所有查询
设置级别
db.setProfilingLevel(2)
设置级别后需要保留的查询会被保留在
system.profile中。
查询记录
db.system.profile.find()
相关文章推荐
- Step into Kotlin - 09 - 集合
- Step into MongoDB - 02 - 数据类型
- Step into MongoDB - 03 - Database & Collection & Document
- Step into MongoDB - 15 - GridFS
- Step into MongoDB - 04 - 简单查询
- Step into MongoDB - 08 - 聚合查询
- Step into MongoDB - 11 - MapReduce
- Step into MongoDB - 13 - 副本集
- Step into MongoDB - 07 - 复杂查询
- Step into Redis- 09 - 主从复制
- Step into MongoDB - 14 - 分片
- Step into MongoDB - 05 - 插入与删除
- Step into MongoDB - 06 - 更新操作
- Step into MongoDB - 12 - 主从复制
- Step into MongoDB - 10 - 服务端命令
- Step into MongoDB - 16 - 账号管理
- Step into MongoDB - 01 - 安装与运行
- Mongodb Geo2d索引原理
- Mongodb 建立索引
- mongodb指南(翻译)(十七) - developer zone - 索引(一)简介