轉(zhuǎn)載自:http://blog.csdn.net/qbg19881206/article/details/21791119
一、索引操作
索引是為了優(yōu)化查詢速度而生,MongoDB的索引和其他關(guān)系型數(shù)據(jù)庫,比如MySQL,Oracle等的索引幾乎相同,對(duì)于它們的索引優(yōu)化經(jīng)驗(yàn)同樣適用于MongoDB。
1、創(chuàng)建索引
MongoDB中建立索引是通過ensureIndex操作完成的。下面測(cè)試了在使用索引和不使用索引下的性能差別,使用explain函數(shù)進(jìn)行查詢性能分析。
插入測(cè)試數(shù)據(jù):

不使用索引的查詢:

使用索引的查詢:

由以上測(cè)試可見,使用恰當(dāng)?shù)乃饕檎铱梢源蟠髢?yōu)化查詢效率。
2、刪除索引

索引的元信息存儲(chǔ)在每個(gè)數(shù)據(jù)庫的system.indexes集合中,該集合為保留集合,不能對(duì)其插入或刪除文檔。操作只能通過ensureIndex或dropIndexes進(jìn)行。
二、唯一索引
唯一索引可以確保集合的每一個(gè)文檔的指定鍵都有唯一值。MongoDB建立唯一索引的方式如下:
[javascript] view plain copy如果沒有對(duì)應(yīng)的鍵,索引會(huì)將其作為null存儲(chǔ)。所以,如果對(duì)某個(gè)鍵建立了唯一索引,但插入了多個(gè)缺少該索引鍵的文檔,則由于文檔包含null值而導(dǎo)致插入失敗。
三、組合索引
通過為ensureIndex的第一個(gè)參數(shù)傳入多個(gè)鍵值的文檔來實(shí)現(xiàn)組合索引的建立。組合索引適用于對(duì)多條件查詢的優(yōu)化上,一般來說,如果索引包含N個(gè)鍵,則對(duì)于前幾個(gè)鍵的查詢都會(huì)有幫助。比如有個(gè)索引{"a":1,"b":1,"c":1,...,"z":1},實(shí)際上是有了{(lán)"a":1},{"a":1,"b":1},{"a":1,"b":1,"c":1}等的索引,但使用{"b":1},{"a":1,"c":1}等索引的查詢則不會(huì)被優(yōu)化。
四、地理空間索引
MongoDB的地理空間索引用于處理平面坐標(biāo)的查詢,對(duì)于查找離當(dāng)前位置最近的N個(gè)場(chǎng)所非常適用,在LBS應(yīng)用中經(jīng)常使用。
1、創(chuàng)建空間索引
[Javascript] view plain copy通過find函數(shù)查找:
將按照離坐標(biāo)點(diǎn)(40,80)由近及遠(yuǎn)的方式將map集合的前5個(gè)文檔返回。
[javascript] view%20plain copy通過數(shù)據(jù)庫命令查找:
[javascript] view%20plain copy具體其他空間索引的查找請(qǐng)參考MongoDB官方文檔關(guān)于索引的介紹。
五、總結(jié)
對(duì)于索引的使用,要建立合適的索引,可以使用explain查看當(dāng)前索引的效果。如果索引不適合當(dāng)前業(yè)務(wù)需求的話,就要修改或刪除,以免不必要或不恰當(dāng)?shù)乃饕龑?duì)數(shù)據(jù)庫操作產(chǎn)生影響。畢竟索引需要消耗內(nèi)存和文件存儲(chǔ)。對(duì)于索引要實(shí)時(shí)維護(hù),不要索引每一個(gè)鍵。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注