a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數據庫 > 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、地理空間索引是沒有單位的,其內部實現是基本的勾股定理算法。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 91看片网 | 精品电影| 操网| 欧美lesbianxxxxhd视频社区 | 日韩综合| 一级毛片免费播放 | 青青草久草在线 | 夜夜躁狠狠躁夜躁麻豆 | 韩日黄色片 | 欧美日韩激情在线 | 国产 欧美 日韩 一区 | 久久久久中精品中文字幕19 | 国产成人av免费 | 国产精品久久免费看 | 国产成人精品亚洲777人妖 | 久久久男人天堂 | 国产午夜视频 | 桃花久久| 国产精品入口麻豆www | 精品国产乱码久久久久久蜜臀 | 91免费看片 | 国产精品理论片 | 精品国产一区二区三区性色 | 色综合99| 欧美视频亚洲视频 | 97人人做人人人难人人做 | 精品国产乱码久久久久久蜜臀 | 亚洲人人舔人人 | 欧美一级片在线观看 | 天天草狠狠干 | 久在线 | 亚洲在线视频 | 99热在线播放 | 亚洲国产字幕 | 亚洲一区免费视频 | 国产在线拍偷自拍观看视频网站 | 亚洲一区二区三区在线播放 | 国产欧美一区二区精品婷婷 | 中文字幕1区 | 黄在线免费观看 | 一区二区三区亚洲 |