亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2423 | 回復(fù): 0
打印 上一主題 下一主題

[MongoDB] [原創(chuàng)] MongoDB管理與開發(fā)精要《紅丸出品》16 索引 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-08-01 23:32 |只看該作者 |倒序瀏覽
第十六章 索引

MongoDB提供了多樣性的索引支持,索引信息被保存在system.indexes中,且默認總是為_id創(chuàng)建索引,它的索引使用基本和MySQL等關(guān)系型數(shù)據(jù)庫一樣。其實可以這樣說說,索引是凌駕于數(shù)據(jù)存儲系統(tǒng)之上的另一層系統(tǒng),所以各種結(jié)構(gòu)迥異的存儲都有相同或相似的索引實現(xiàn)及使用接口并不足為奇。

16.1 基礎(chǔ)索引

在字段age上創(chuàng)建索引,1(升序);-1(降序)

> db.t3.ensureIndex({age:1})
> db.t3.getIndexes();
[
        {
                "name" : "_id_",
                "ns" : "test.t3",
                "key" : {
                        "_id" : 1
                },
                "v" : 0
        },
        {
                "_id" : ObjectId("4fb906da0be632163d0839fe"),
                "ns" : "test.t3",
                "key" : {
                        "age" : 1
                },
                "name" : "age_1",
                "v" : 0
        }
]
>

上例顯示出來的一共有2個索引,其中_id是創(chuàng)建表的時候自動創(chuàng)建的索引,此索引是不能夠刪除的。


當系統(tǒng)已有大量數(shù)據(jù)時,創(chuàng)建索引就是個非常耗時的活,我們可以在后臺執(zhí)行,只需指定“backgroud:true”即可。

> db.t3.ensureIndex({age:1} , {backgroud:true})
16.2 文檔索引

索引可以任何類型的字段,甚至文檔

db.factories.insert( { name: "wwl", addr: { city: "Beijing", state: "BJ" } } );

//在addr列上創(chuàng)建索引
db.factories.ensureIndex( { addr : 1 } );

//下面這個查詢將會用到我們剛剛建立的索引
db.factories.find( { addr: { city: "Beijing", state: "BJ" } } );

//但是下面這個查詢將不會用到索引,因為查詢的順序跟索引建立的順序不一樣
db.factories.find( { addr: { state: "BJ" , city: "Beijing"} } );
16.3 組合索引

跟其它數(shù)據(jù)庫產(chǎn)品一樣,MongoDB也是有組合索引的,下面我們將在addr.city和addr.state上建立組合索引。當創(chuàng)建組合索引時,字段后面的1表示升序,-1表示降序,是用1還是用-1主要是跟排序的時候或指定范圍內(nèi)查詢的時候有關(guān)的。

db.factories.ensureIndex( { "addr.city" : 1, "addr.state" : 1 } );

// 下面的查詢都用到了這個索引
db.factories.find( { "addr.city" : "Beijing", "addr.state" : "BJ" } );
db.factories.find( { "addr.city" : "Beijing" } );
db.factories.find().sort( { "addr.city" : 1, "addr.state" : 1 } );
db.factories.find().sort( { "addr.city" : 1 } )
16.4 唯一索引

只需在ensureIndex命令中指定”unique:true”即可創(chuàng)建唯一索引。例如,往表t4中插入2條記錄

db.t4.insert({firstname: "wang", lastname: "wenlong"});
db.t4.insert({firstname: "wang", lastname: "wenlong"});

在t4表中建立唯一索引

> db.t4.ensureIndex({firstname: 1, lastname: 1}, {unique: true});
E11000 duplicate key error index: test.t4.$firstname_1_lastname_1  dup key: { : "wang", : "wenlong" }

可以看到,當建唯一索引時,系統(tǒng)報了“表里有重復(fù)值”的錯,具體原因就是因為表中有2條一模一模的數(shù)據(jù),所以建立不了唯一索引。

16.5 強制使用索引

hint命令可以強制使用某個索引。

> db.t5.insert({name: "wangwenlong",age: 20})
> db.t5.ensureIndex({name:1, age:1})
> db.t5.find({age:{$lt:30}}).explain()
{
        "cursor" : "BasicCursor",
        "nscanned" : 1,
        "nscannedObjects" : 1,
        "n" : 1,
        "millis" : 0,
        "nYields" : 0,
        "nChunkSkips" : 0,
        "isMultiKey" : false,
        "indexOnly" : false,
        "indexBounds" : {               --并沒有用到索引

        }
}
> db.t5.find({age:{$lt:30}}).hint({name:1, age:1}).explain()      --強制使用索引
{
        "cursor" : "BtreeCursor name_1_age_1",
        "nscanned" : 1,
        "nscannedObjects" : 1,
        "n" : 1,
        "millis" : 1,
        "nYields" : 0,
        "nChunkSkips" : 0,
        "isMultiKey" : false,
        "indexOnly" : false,
        "indexBounds" : {                --被強制使用索引了
                "name" : [
                        [
                                {
                                        "$minElement" : 1
                                },
                                {
                                        "$maxElement" : 1
                                }
                        ]
                ],
                "age" : [
                        [
                                -1.7976931348623157e+308,
                                30
                        ]
                ]
        }
}
>
16.6 刪除索引

刪除索引分為刪除某張表的所有索引和刪除某張表的某個索引,具體如下:

//刪除t3表中的所有索引
db.t3.dropIndexes()

//刪除t4表中的firstname索引
db.t4.dropIndex({firstname: 1})







  • [url=]本版精華[/url]






大學(xué)生DBA訓(xùn)練營(ChinaDBA.net)創(chuàng)始人!學(xué)費1元,也就是這1元錢的力量,足以改變你的職業(yè)生涯
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP