MongoDB索引管理——建立索引,查看索引,刪除索引,重建索引

來源:互聯網
上載者:User

標籤:除了   複合式索引   end   use   key   讀寫   min   導致   指定   

先給users集合插入兩條記錄,然後用users集合來進行索引管理的示範:

> user1={"name":"liming","age":20,"gender":"F"}{ "name" : "liming", "age" : 20, "gender" : "F" }> db.users.insert(user1)WriteResult({ "nInserted" : 1 })> user2={"name":"zhangsan","age":25,"gender":"F"}{ "name" : "zhangsan", "age" : 25, "gender" : "F" }> db.users.insert(user1)WriteResult({ "nInserted" : 1 })> db.users.count()2
建立索引:

mongodb使用createIndex()和ensureIndex()方法來建立索引,前者用於3.0及以上版本,後者用於3.0以下版本。
例1:給name欄位建立正序索引

> 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"    }]

MongoDB索引管理——建立索引,查看索引,刪除索引,重建索引

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.