1、索引属性
1)创建索引时的格式:db.collection.ensureIndex({param},{param}),其中第二个参数便是索引的属性;
2)比较重要的属性有:名字,name指定:db.collection.ensureIndex({},{name:""});
3)唯一性,unique指定:db.collection.ensureIndex({},{unique:true/false});
4)稀疏性,sparse指定:db.collection.ensureIndex({},{sparse:true/false});
5)是否定时删除,expireAfterSeconds指定:TTL,过期索引;
2、地理位置索引
概念:将一些点的位置存储在MongoDB中,创建索引后,可以按照位置来查找其他点。
子分类:2d索引,用于存储和查找平面上的点。sdsphere索引,用于存储和查找球面上的点。
查找方式:查找距离某个点一定距离内的点,查找包含在某区域内的点。
3、2D索引:平面地理位置索引
创建方式:db.collection.ensureIndex({"w":"2d"})
位置表示方式:经纬度[经度,纬度]
取值范围:经度[-180,180]纬度[-90,90]
查询方式:$near查询:查询距离某个点最近的点,$geoWithin查询:查询某个形状内的点
4、形状的表示
$box:矩形,使用
{$box:[[<x1>,<y1>],[<x2>,<y2>]]}表示。
$center:圆形,使用
{$center:[[<x1>,<y1>],r]}表示。
$polygon:多边形,使用
{$polygon:[[<x1>,<y1>],[<x2>,<y2>],[<x3>,<y3>]]}表示
5、使用geoWithin查询
6、使用geoNear查询
geoNear查询:geoNear使用runCommand命令进行使用,常用使用如下:
db.runCommand(
{geoNear:<collection>,
near:[x,y],
minDistance:(对2d索引无效)
maxDistance:
num:
........})
7、2dsphere索引
概念:球面地理位置索引
创建方式:db.collection.ensureIndex({"w":"2dsphere"})
位置表示方式:
GeoJSON:描述一个点,一条直线,多边形等形状。
格式:
{type:"", coordinates:[<coordinates>]}
查询方式与2d索引查询方式类似,
支持$minDistance与$maxDistance
8、索引构建情况分析
索引好处:加快索引相关的查询。
索引不好处:增加磁盘空间消耗,降低写入性能。
如何判断当前索引构建情况:
1)mongostat工具介绍。
2)profile集合介绍。
3)日志介绍。
4)explain分析。
9、mongostat查看mongodb运行状态使用命令介绍
mongostat:查看mongodb运行状态的程序。
使用说明:mongostat -h 127.0.0.1:12345
字段说明:
索引情况:idx miss
10、使用mongostat效果验证
11、关于profile集合
12、关于mongodb日志
13、关于explain