国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Mongodb 索引

2019-11-06 06:39:38
字體:
供稿:網(wǎng)友

轉(zhuǎn)載自:http://blog.csdn.net/qbg19881206/article/details/21791119

一、索引操作

索引是為了優(yōu)化查詢速度而生,MongoDB的索引和其他關(guān)系型數(shù)據(jù)庫,比如MySQLOracle等的索引幾乎相同,對(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 在CODE上查看代碼片db.person.ensureIndex({"name":1},{"unique":true})  

如果沒有對(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 在CODE上查看代碼片db.map.ensureIndex({"gps":"2d"})  "gps"鍵的值必須是某種形式的一對(duì)值:一個(gè)包含兩個(gè)元素的數(shù)組或是包含兩個(gè)鍵(鍵名隨意)的內(nèi)嵌文檔,如下所示:[javascript] view%20plain copy {"gps":[0,100]}  {"gps":{"x":0,"y":30}}  {"gps":{"latitude":0,"longitude":100}}  默認(rèn)情況下,地理空間索引假設(shè)值的范圍是-180~180,這對(duì)于處理經(jīng)緯度非常方便,也可以設(shè)置其范圍:[javascript] view%20plain copy db.map.ensureIndex({"gps":"2d"},{"min":-360,"max":360})  2、查找

通過find函數(shù)查找:

將按照離坐標(biāo)點(diǎn)(40,80)由近及遠(yuǎn)的方式將map集合的前5個(gè)文檔返回。

[javascript] view%20plain copy db.map.find({"gps":{"$near":[40,80]}}).limit(5)  

通過數(shù)據(jù)庫命令查找:

[javascript] view%20plain copy 派生到我的代碼片db.runCommand({geoNear:"map",near:[40,80],num:5});  geoNear和使用$near的find普通查找類似,不過geoNear還會(huì)返回每個(gè)文檔到查詢點(diǎn)的距離。該距離以插入數(shù)據(jù)為單位,比如按照經(jīng)緯度的角度插入,那距離就是經(jīng)緯度。

具體其他空間索引的查找請(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è)鍵。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 汉寿县| 乳山市| 威远县| 左贡县| 浪卡子县| 蒙自县| 德保县| 焦作市| 扎鲁特旗| 丁青县| 乌苏市| 靖江市| 襄城县| 华安县| 霍山县| 屏南县| 灌云县| 英吉沙县| 武冈市| 黄骅市| 昌图县| 喀什市| 大余县| 东平县| 郎溪县| 壤塘县| 婺源县| 浮山县| 奉化市| 普陀区| 北碚区| 梁河县| 宁强县| 民县| 遂川县| 绥阳县| 延安市| 额敏县| 高邑县| 枞阳县| 广水市|