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

首頁 > 數據庫 > MongoDB > 正文

十天掌握MongoDB之四:使用索引

2020-03-14 13:23:21
字體:
來源:轉載
供稿:網友

創建索引

MongoDB的索引機制與傳統的關系型數據庫索引幾乎是一樣的,絕大多數優化SQL索引的技巧也都適用于MongoDB。索引會增加數據插入、更新和刪除的性能開銷,應避免為每個鍵都創建索引。

// 創建 索引

db . things . ensureIndex ({

'j ' : 1

});

// 創建子文檔 索引

db . things . ensureIndex ({

'user.Name ' : - 1

});

// 創建復合索引

db . things . ensureIndex ({

'j ' : 1 , // 升序

'x ' : - 1 // 降序

});

/*

如果您的 find 操作只用到了一個鍵,那么索引方向是無關緊要的;當創建復合索引的時候,一定要謹慎斟酌每個鍵的排序方向 。

* /

修改索引

// 修改索引,只需要重新運行索引命令即可

// 如果索引已經存在則會重建, 不存在的索引會被 添加

db . things . ensureIndex ({

// 原來的索引會 重建

'user.Name ' : - 1 ,

// 新增一個升序 索引

'user.Name ' : 1 ,

// 為 Age 新建降序 索引

'user.Age ' : - 1

}, {

// 打開后臺執行

‘background' : true

});

// 重建索引

db. things .reIndex();

注意:MongoDB不會檢查要索引的鍵名是否真的存在。當background為false或未指定時,創建索引的過程會以阻塞的形式運行,此時MongoDB無法處理任何請求。

刪除索引

如果刪除整個集合(drop)也會刪除集合中的索引。如果是刪除集合中所有的文檔(remove)則不會影響索引,當有新文檔插入時,索引就會重建。

// 刪除集合中的所有 索引

db . things . dropIndexes ();

// 刪除指定鍵的索引

db . things . dropIndex ({

x : 1 ,

y : - 1

});

// 使用 command 刪除指定鍵的 索引

db . runCommand ({

dropIndexes : 'foo ' ,

index : { y : 1 }

});

// 使用 command 刪除所有 索引

db . runCommand ({

dropIndexes : 'foo ' ,

index : '*‘

});

唯一索引

// 創建唯一索引,同時這也是一個符合唯一索引

db . things . ensureIndex (

{

'firstName ' : 1 ,

'lastName ' : 1

}, {

// 指定為唯一索引

'unique ' : true ,

// 刪除重復 記錄

'dropDups ' : true

});

注意:

1、_id本身就是個唯一索引,不同的是,它不能被刪除;

2、刪除重復記錄時,僅會按順序保留第一文檔;

3、如果創建了唯一索引,但文檔并不包含該鍵,默認以null存儲,因此如果發現了第二項未指定該鍵或該鍵被指定為null的記錄,就會被認為是重復的;

4、所謂復合唯一索引,允許單鍵重復,但組合起來之后是不允許重復的;

地理空間索引 - 創建

不了解神馬是地理空間?先看下百度的解釋吧【地理空間】!

MongoDB為處理地理空間信息增加了一個專門的索引結構——2d,對就是二弟!

要使用二弟索引,表示地理坐標的鍵必須是一個長度為2的數組。然后為該鍵創建取值為“2d”的索引即可。請看下面代碼實例。

// 文檔 格式

{

'_ id' : 1 ,

'name ' : ' 天安門 ' ,

'location' :[

116.12345 ,

39.54321

]

}

// 創建地理空間 索引

db . map . ensureIndex ({

'location ' : '2d‘

});

MongoDB的地理空間索引的取值沒有單位,這意味著你可以為其設置任何單位。默認地理空間索引的假設值是-180 ~ 180。如果需要自定義其他的取值范圍,請參考下面代碼實例。

// 創建地理空間 索引

db . map . ensureIndex ({

'location ' : '2d‘

}, {

'min ' : - 10000 ,

'max ' : 10000

});

地理空間索引 - $NEAR

$near操作符與geoNear Command的區別在于:geoNear會同時返回每個地標與給定中心點的距離(注意,這里的距離沒有單位)。

// $near 操作符

db . places . find ({

loc : {

// 中心點

$ near : [ 50 , 50 ],

// 查詢半徑

$ maxDistance : 5

}

}). limit ( 20 );

// 如果沒有指定 limit ,其默認值為 100

地理空間索引 - $WITHIN(BOX)

$within操作符支持以下幾個選項:

• $box:矩形查找

• $center:圓形查找

• $polygon:多邊形查找(v1.9+支持)

$box實例

// 定義一個矩形 區域

var box = [

// 左 上角

[ 40.73083 , - 73.99756 ],

// 右 下角

[ 40.741404 , - 73.988135 ]

];

// 查找

db . places . find ({

" loc" : {

"$ within" : {

"$ box" : box

}

}

});

$center實例

// 定義 中心點

var center = [ 50 , 50 ];

// 定義查找 半徑

var radius = 10 ;

// 查找

db . places . find ({

" loc" : {

"$ within" : {

// 注意這里是數組傳遞

"$ center" : [

center ,

radius

]

}

}

});

$polygon實例

十天掌握MongoDB之四:使用索引

小結

1、索引可以加速查詢;

2、單個索引無需在意其索引方向;

3、多鍵索引需要慎重考慮每個索引的方向;

4、做海量數據更新時應當先卸載所有索引,待數據更新完成后再重建索引;

5、不要試圖為每個鍵都創建索引,應考慮實際需要,并不是索引越多越好;

6、唯一索引可以用來消除重復記錄;

7、地理空間索引是沒有單位的,其內部實現是基本的勾股定理算法。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 教育| 河间市| 民权县| 安阳市| 龙山县| 鲁山县| 凭祥市| 崇礼县| 河东区| 新和县| 鹤岗市| 泰顺县| 丰城市| 长岛县| 合肥市| 阿荣旗| 嘉义市| 凭祥市| 潍坊市| 万源市| 莱州市| 西峡县| 邵阳县| 锡林浩特市| 永靖县| 鹿泉市| 汪清县| 连江县| 台北市| 寻乌县| 鹿泉市| 乌拉特前旗| 龙南县| 绍兴县| 三门峡市| 汝州市| 吉木萨尔县| 喀喇| 苏尼特右旗| 郓城县| 建昌县|