什么是索引?
索引是一种特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或者多列的值进行排序的一种结构。索引能够极大提高查询效率,特别是在处理大数据量时,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。
1.创建与重建索引
MongoDB索引的创建使用ensureIndex()方法,对于已经存在的索引可以使用reIndex进行重建
ensureIndex()的使用:
语法结构:
db.collection_name.ensureIndex(keys[,options])
keys:要建立的参数列表。如:{KEY:1},其中KEY表示字段名,1表示升序,也可使用数字-1降序。
options:可选参数,表示建立索引的设置。可选值有:
background,Boolean值 在后台建立索引,以便建立索引时不阻止其他数据库活动。默认值false
unique,Boolean值 创建唯一索引。默认值false
name,String值 指定索引的名字,如未指定,MongoDB会生成一个索引字段的名称和排序顺序串联。
dropDups,Boolean,创建唯一索引时,如果出现重复删除后续出现的相同索引,只保留第一个。
sparse,Boolean,对文档中不存在的字段数据不启用索引。默认值是 false。
v,index version,索引的版本号。
weights,document,索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。
为集合xmm创建索引:
> db.xmm.ensureIndex({name:1,domain:-1})
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
为集合xmm重建索引:
db.COLLECTION_NAME.reIndex()
> db.xmm.reIndex()
{
"nIndexesWas" : 2,
"nIndexes" : 2,
"indexes" : [
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.xmm"
},
{
"v" : 2,
"key" : {
"name" : 1,
"domain" : -1
},
"name" : "name_1_domain_-1",
"ns" : "test.xmm"
}
],
"ok" : 1
}
>
查看索引:
db.COLLECTION_NAME.getIndexes()
> db.xmm.getIndexes()
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.xmm"
},
{
"v" : 2,
"key" : {
"name" : 1,
"domain" : -1
},
"name" : "name_1_domain_-1",
"ns" : "test.xmm"
}
]
>
查看集合中索引大小:
db.COLLECTION_NAME.totalIndexSize()
> db.xmm.totalIndexSize()
8192
>
查看数据库中所有索引:
db.system.indexes.find()
删除索引:
不需要的索引,我们可以将其删除,删除索引时,可以删除集合中某一处索引,可以删除全部索引。
删除指定索引:
db.collection_name.dropIndex("INDEX-NAME")
删除所有索引:
db.collection_name.dropIndexes()