首先我們來了解索引,如果有基礎的可以直接看最后面的操作。
可參照 DoNotStop 的CSDN 博客 ,全文地址請點擊:
https://blog.csdn.net/u013725455/article/details/52037897
創建索引:
mongodb使用createIndex()和ensureIndex()方法來創建索引,前者用於3.0及以上版本,后者用於3.0以下版本。
語法:
db.COLLECTION_NAME.ensureIndex(keys[,options])
keys:要建立索引的參數列表。如:{KEY:1},其中key表示字段名,1表示升序排序,也可使用使用數字-1降序。
options:可選參數,表示建立索引的設置。可選值如下:
background,Boolean,在后台建立索引,以便建立索引時不阻止其他數據庫活動。默認值為false。
unique,Boolean,創建唯一索引。默認值 false。
name,String,指定索引的名稱。如果未指定,MongoDB會生成一個索引字段的名稱和排序順序串聯。
partialFilterExpression, document.如果指定,MongoDB只會給滿足過濾表達式的記錄建立索引.
sparse,Boolean,對文檔中不存在的字段數據不啟用索引。默認值是 false。
expireAfterSeconds,integer,指定索引的過期時間
storageEngine,document,允許用戶配置索引的存儲引擎
> db.users.createIndex({"name":1}) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
例2:給name字段創建倒序索引
> db.users.createIndex({"name":-1}) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 2, "numIndexesAfter" : 3, "ok" : 1 }
例3:給name,age字段創建組合索引
> db.users.createIndex({"name":1,"age":1}) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 3, "numIndexesAfter" : 4, "ok" : 1 }
例4:在后台給age字段創建索引
> db.users.createIndex({age:1},{background:1})
{
"createdCollectionAutomatically" : false, "numIndexesBefore" : 4, "numIndexesAfter" : 5, "ok" : 1 }
在后台創建索引的原因:
在前台創建索引期間會鎖定數據庫,會導致其它操作無法進行數據讀寫,在后台創建索引是,會定期釋放寫鎖,從而保證其它操作的運行,但是后台操作會在耗時更長,尤其是在頻繁進行寫入的服務器上。
查看索引:
MongoDB提供的查看索引信息的方法:
getIndexes()方法可以用來查看集合的所有索引,
getIndexKeys()方法查看索引鍵。
totalIndexSize()查看集合索引的總大小,
getIndexSpecs()方法查看集合各索引的詳細信息
例1: getIndexes()的用法
> db.users.getIndexes()
[
{
"v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test1.users" }, { "v" : 1, "key" : { "name" : 1 }, "name" : "name_1", "ns" : "test1.users" }, { "v" : 1, "key" : { "name" : -1 }, "name" : "name_-1", "ns" : "test1.users" }, { "v" : 1, "key" : { "name" : 1, "age" : 1 }, "name" : "name_1_age_1", "ns" : "test1.users" }, { "v" : 1, "key" : { "age" : 1 }, "name" : "age_1", "ns" : "test1.users", "background" : 1 } ]
例2:getIndexKeys()的用法
> db.users.getIndexKeys()
[
{
"_id" : 1 }, { "name" : 1 }, { "name" : -1 }, { "name" : 1, "age" : 1 }, { "age" : 1 } ]
例3:totalIndexSize()的用法
> db.users.totalIndexSize() 81920
例4:getIndexSpecs()的用法
> db.users.getIndexSpecs()
[
{
"v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test1.users" }, { "v" : 1, "key" : { "name" : 1 }, "name" : "name_1", "ns" : "test1.users" }, { "v" : 1, "key" : { "name" : -1 }, "name" : "name_-1", "ns" : "test1.users" }, { "v" : 1, "key" : { "name" : 1, "age" : 1 }, "name" : "name_1_age_1", "ns" : "test1.users" }, { "v" : 1, "key" : { "age" : 1 }, "name" : "age_1", "ns" : "test1.users", "background" : 1 } ]
刪除索引:
不再需要的索引,我們可以將其刪除,mongodb提供兩種刪除索引的方法:
dropIndex()方法用於刪除指定的索引
dropIndexes()方法用於刪除全部的索引
例1:dropIndex()的用法
> db.users.dropIndex("name_1") { "nIndexesWas" : 5, "ok" : 1 } > db.users.dropIndex("name_1_age_1") { "nIndexesWas" : 4, "ok" : 1 } > db.users.getIndexSpecs() [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test1.users" }, { "v" : 1, "key" : { "name" : -1 }, "name" : "name_-1", "ns" : "test1.users" }, { "v" : 1, "key" : { "age" : 1 }, "name" : "age_1", "ns" : "test1.users", "background" : 1 } ]
我們可以看到,name字段的索引和name與age字段的組合索引皆被刪除
例2:dropIndexes()的用法
> db.users.dropIndexes() { "nIndexesWas" : 3, "msg" : "non-_id indexes dropped for collection", "ok" : 1 } > db.users.getIndexSpecs() [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test1.users" } ]
在使用了dropIndexes()方法后,我們之前建的所有索引都被刪除掉了
索引重建:
我們之前把users的索引全部刪除了,現在在name字段上建立一個正序索引,然后在name字段上重建倒序索引,可以看到重建索引是把之前name字段的索引刪掉再新建一個索引的,重建之前name字段還是只有一個索引.
> db.users.createIndex({name:1})
{
"createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 } > db.users.getIndexSpecs() [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test1.users" }, { "v" : 1, "key" : { "name" : 1 }, "name" : "name_1", "ns" : "test1.users" } ] > db.users.reIndex({name:-1}) { "nIndexesWas" : 2, "nIndexes" : 2, "indexes" : [ { "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test1.users" }, { "key" : { "name" : 1 }, "name" : "name_1", "ns" : "test1.users" } ], "ok" : 1 } > db.users.getIndexSpecs() [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test1.users" }, { "v" : 1, "key" : { "name" : 1 }, "name" : "name_1", "ns" : "test1.users" } ]
linux環境給mongodb創建索引
1.首先我們進入到linux mongodb安裝目錄的bin下面執行以下命令:
./mongo --host ip:端口
2.選擇用戶
use admin
3.選擇庫
use 庫名
4.執行創建索引命令,等待創建索引。
db.表名.createIndex({"title":1})
5.創建完成后執行exit退出