MongoDB:创建索引

MongDB 支持丰富的查询,同时支持灵活的索引创建操作,例如支持升序/降序索引,组合索引,Multikey Index 等等,今天仅演示索引的相关操作,如创建,查看等。

MongDB 创建索引的命令为 ensureIndex,这个命令有两个参数,如下所示:

  1. keys: 包括索引的列以及索引的顺序(升序/降序);
  2. optins: 创建索引的选项,可选参数,例如 background,unique,name 等。

以下是具体的演示过程:

1 创建测试表

1
2
3
4
5
6
7
8
9
10
[mongo@redhatB ~]$ mongo  
MongoDB shell version: 2.2.1
connecting to: test
> for (var i=1; i<=100001; i++ ) db.test_4.save({skyid:i,name:'a'});
> db.test_4.find().limit (5);
{ "_id" : ObjectId("50aa31344e8ce0d3738f8afa"), "skyid" : 1, "name" : "a" }
{ "_id" : ObjectId("50aa31344e8ce0d3738f8afb"), "skyid" : 2, "name" : "a" }
{ "_id" : ObjectId("50aa31344e8ce0d3738f8afc"), "skyid" : 3, "name" : "a" }
{ "_id" : ObjectId("50aa31344e8ce0d3738f8afd"), "skyid" : 4, "name" : "a" }
{ "_id" : ObjectId("50aa31344e8ce0d3738f8afe"), "skyid" : 5, "name" : "a" }

备注:创建测试表并插入 10000 条数据。并插入 100001 条数据。

2 查看现有索引

1
2
3
4
5
6
7
8
9
10
11
> db.test_4.getIndexes();  
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "skytf.test_4",
"name" : "_id_"
}
]

备注: 返回了一条索引项,包括四个元素,解释如下:
v: 索引的版本号,这由 mongod 的版本决定,2.0 版本之前的 mongod 这个值为 0,
2.0 或之后的 mongod 的版本这个值为 1。
key: 索引项名称以及索引的排序规则(升序/降序)
ns: 索引所在的集合的名称
name: 索引名称

3 创建索引

1
> db.test_4.ensureIndex({skyid:1},{name:"idx_test_4_skyid"});

备注:上面指定了 “name” 可选参数,即指定索引名称。

4 再次查看索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
> db.test_4.getIndexes();  
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "skytf.test_4",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"skyid" : 1
},
"ns" : "skytf.test_4",
"name" : "idx_test_4_skyid" }
]

备注:返回的结果为两条索引项。

5 查询数据库里所有索引

1
2
3
> db.system.indexes.find({"ns":"skytf.test_4"});  
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "skytf.test_4", "name" : "_id_" }
{ "v" : 1, "key" : { "skyid" : 1 }, "ns" : "skytf.test_4", "name" : "idx_test_4_skyid" }

备注: system.indexes 存储了当前数据库所有的索引信息。

由于创建索引过程会阻塞其它数据库操作,建议以后台方式创建索引,即增加 “background” 可选参数。

6 删除索引

1
2
> db.test_4.dropIndex('idx_test_4_skyid');  
{ "nIndexesWas" : 2, "ok" : 1 }

备注:删除表 test_4 的 idx_test_4_skyid 索引。

7 以后台方式创建索引

1
> db.test_4.ensureIndex({skyid:1},{name:"idx_test_4_skyid",background:true});

8 再次查看索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
> db.test_4.getIndexes();db.test_4.getIndexes();  
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "skytf.test_4",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"skyid" : 1
},
"ns" : "skytf.test_4",
"name" : "idx_test_4_skyid",
"background" : true
}
]

9 总结

索引维护操作还有很多,以及索引创建过程中对其它操作的影响还没深入了解,今天先学习到这。

10 参考

http://docs.mongodb.org/manual/reference/method/db.collection.getIndexes/#db.collection.getIndexes
http://docs.mongodb.org/manual/reference/method/db.collection.ensureIndex/#db.collection.ensureIndex
http://docs.mongodb.org/manual/administration/indexes/

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/database/237917.html

(0)
上一篇 2022年1月29日 22:31
下一篇 2022年1月29日 22:31

相关推荐

发表回复

登录后才能评论