欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MongoDB索引機(jī)制詳解

 更新時(shí)間:2023年04月23日 11:51:07   作者:不渴望力量的哈士奇  
與MySQL 一樣,"索引" 在 MongoDB 中也是用于優(yōu)化查詢的一種數(shù)據(jù)結(jié)構(gòu),通過創(chuàng)建適當(dāng)?shù)乃饕?,MongoDB 能夠快速地定位符合查詢條件的文檔,從而減少了掃描文檔的數(shù)量,提高了查詢性能。本文詳細(xì)介紹了MongoDB 的索引機(jī)制,感興趣的同學(xué)可以參考閱讀

? MongoDB 的索引機(jī)制

與MySQL 一樣,"索引" 在 MongoDB 中也是用于優(yōu)化查詢的一種數(shù)據(jù)結(jié)構(gòu)。

通過創(chuàng)建適當(dāng)?shù)乃饕?,MongoDB 能夠快速地定位符合查詢條件的文檔,從而減少了掃描文檔的數(shù)量,提高了查詢性能。

? 索引的類型

MongoDB 的索引也是為了提升數(shù)據(jù)的檢索速度,原理也是先對(duì)數(shù)據(jù)進(jìn)行排序,然后就可以提升檢索的速度了。

因?yàn)槭?NoSQL 數(shù)據(jù)庫,所以 MongoDB 存放記錄的數(shù)量要遠(yuǎn)超 MySQL ,如果沒有索引,一個(gè)查詢請求就會(huì)讓 MOngoDB 做全表掃描,這種檢索效率是非常低的。

一次查詢要花費(fèi)幾十秒甚至幾分鐘的時(shí)間,所以 “索引機(jī)制” 對(duì)于在海量數(shù)據(jù)中的快速定位查找就非常的重要了。

常用的索引有 "單字段索引"、"多字段索引"、"文本索引"、"空間索引" 等,接下來我們就來一一了解吧。

?? 創(chuàng)建索引 - 單字段索引

單字段索引是最簡單的索引類型,它只包含一個(gè)字段。以前面章節(jié)中我們使用到的 “student” 集合 為例,可以在 name 字段上創(chuàng)建一個(gè)單字段索引。

單字段索引的創(chuàng)建語法:db.collection.createIndex({key:1},options);

  • collection 為某一個(gè)集合;
  • createIndex 為創(chuàng)建索引的函數(shù);
  • key 為需要?jiǎng)?chuàng)建索引的字段, 1 表示升序排序,如果想要按照降序排序,可以使用 -1;索引可以加速對(duì) key 字段的查詢。

示例如下:

db.student.createIndex({name: 1 });

// 為集合 student 中 name 字段 創(chuàng)建索引,升序排列。

在創(chuàng)建索引的時(shí)候,經(jīng)常會(huì)使用的一些選項(xiàng)參數(shù),比如為索引命名、利用非阻塞模式等等,尤其是 “非阻塞模式”。在下文中的 “索引時(shí)的一些重要選項(xiàng)參數(shù)” 有詳細(xì)介紹。

?? 創(chuàng)建索引 - 多字段索引

多字段索引包含多個(gè)字段,用于加速涉及多個(gè)字段的查詢。

例如,在 students 集合中同時(shí)對(duì) "name" 和 "age" 字段創(chuàng)建一個(gè)多字段索引

db.student.createIndex({name:1, age:-1});

// 為集合 student 中 name 字段 創(chuàng)建索引,升序排列, age 字段也創(chuàng)建索引,降序排列

上述代碼創(chuàng)建了一個(gè)名為 name_1_age_-1的多字段索引,其中的1-1分別表示name字段和age 字段的排序規(guī)則。

?? 創(chuàng)建索引 - 唯一性索引

"唯一性索引" 用于確保一個(gè)集合中的文檔在指定字段上的值是唯一的。

唯一性索引只能創(chuàng)建在每個(gè)記錄都含有的公共字段上,在非公共字段上是不能創(chuàng)建唯一-性索引的。

在創(chuàng)建 “唯一性索引” 之后,MongoDB 會(huì)在索引中記錄每個(gè)文檔在該字段上的值,在插入或更新文檔時(shí),MongoDB 會(huì)比對(duì)索引中的值;

如果發(fā)現(xiàn)該字段上已經(jīng)存在同樣的值,就會(huì)拒絕寫入操作并拋出一個(gè)錯(cuò)誤。

在創(chuàng)建 “唯一性索引” 的時(shí)候,需要傳入 "unique 參數(shù)" 用于指定索引是否唯一。如果設(shè)置為 true,則在創(chuàng)建時(shí)將強(qiáng)制執(zhí)行該索引的唯一性約束。

以下是一個(gè)創(chuàng)建唯一索引的示例:

db.student.createIndex({"tel": 1},{ unique: true});

// 將集合 "student" 中 tel 字段設(shè)置為唯一索引

上述代碼將在 student 集合的 tel 字段上創(chuàng)建一個(gè)唯一性索引。在該索引中,每個(gè)文檔都對(duì)應(yīng)一個(gè)唯一的 tel 值。

需要注意的是,唯一性索引可能會(huì)影響 MongoDB 的性能,因?yàn)?MongoDB 需要在每個(gè)寫入操作中比較正在寫入的文檔與索引中的值。因此,在創(chuàng)建唯一性索引時(shí),需要根據(jù)需要選擇合適的字段,并避免過多的唯一性索引。

同時(shí),在操作唯一性索引時(shí),需要注意相關(guān)異常處理,例如捕獲索引操作拋出的錯(cuò)誤,以及避免在異常處理之前對(duì)集合進(jìn)行其他的寫入操作。

?? 創(chuàng)建索引 - 文本索引

文本索引也叫做全文索引,一般用于支持全文搜索。

通過在某些字段上創(chuàng)建文本索引,MongoDB 可以加速全文搜索操作,例如搜索文章中的一些關(guān)鍵字。

以下是一個(gè)使用文本索引實(shí)現(xiàn)全文搜索的示例:

db.articles.createIndex({content:"text"});
db.articles.find({$text:{ $search: "MongoDB is awesome"}});

上述代碼對(duì) articles 集合的 content 字段創(chuàng)建了一個(gè)文本索引,用于支持全文搜索。

查詢語句中,使用 $text 操作符指定使用全文索引,并傳遞了需要搜索的關(guān)鍵字 "MongoDB is awesome"

?? 創(chuàng)建索引 - 地理空間索引

了解即可,反正我是沒用過。

在 MongoDB 中,地理空間索引用于支持地理位置(如經(jīng)度和緯度)的搜索和查詢。通過創(chuàng)建地理空間索引,MongoDB 可以快速地定位符合特定地理范圍內(nèi)的文檔。

在 MongoDB 中,有兩種類型的地理空間索引:2d 索引和2dsphere 索引。其中,2d 索引適用于操作平面上的地理位置信息,例如某個(gè)城市中的商鋪,而2dsphere 索引適用于操作三維空間中的地理位置信息,例如地球上的各個(gè)地理位置。

以下是一個(gè)在 stores 集合上創(chuàng)建 2dsphere 索引的示例:(示例是網(wǎng)上搜的)

db.stores.createIndex({ location: "2dsphere" });

上述代碼在 stores 集合的 location 字段上創(chuàng)建了一個(gè) 2dsphere 索引,以支持地理位置搜索。

下面是一個(gè)基于該索引的查詢示例:

db.stores.find({
  location: {
    $near: {
      $geometry: {
        type: "Point",
        coordinates: [ -73.97, 40.77 ]
      },
      $maxDistance: 5000
    }
  }
});

在上述示例中,使用 $near 操作符和 $geometry 選項(xiàng)來定義將要搜索的坐標(biāo)點(diǎn) [ -73.97, 40.77 ],并使用 $maxDistance 選項(xiàng)來設(shè)置搜索的最大半徑為 5000 米。MongoDB 會(huì)使用 2dsphere 索引來快速地找到在這個(gè)范圍內(nèi)的文檔。

需要注意的是,在使用地理空間索引時(shí),需要注意索引的創(chuàng)建和使用方式,以及數(shù)據(jù)類型的正確性。同時(shí),也需要注意地理空間索引可能會(huì)帶來的性能開銷,并根據(jù)具體需求進(jìn)行索引的優(yōu)化和調(diào)整。

? 查看所有索引

當(dāng)我們創(chuàng)建了索引之后,可以通過 getIndexes() 函數(shù)可以獲取集合中所有索引。

查看索引語法示例:

db.student.getIndexes()

// 查看集合 student 中的所有 "索引"

? 刪除索引

在 MongoDB 中,我們可以使用 dropIndex() 函數(shù)來刪除一個(gè)指定的索引,也可以使用 dropIndexes() 刪除一個(gè)集合上的所有索引。

**dropIndex() 函數(shù) ** 需要指定要?jiǎng)h除索引的集合名稱和索引的名稱或者參數(shù)。

例如,下面的代碼演示如何刪除名為 name_1 的索引:

db.student.dropIndex("name_1");

除了提供索引的名稱以外,還可以通過提供一個(gè)索引鍵或一個(gè)描述索引的選項(xiàng)對(duì)象來刪除特定的索引。

以下示例演示如何基于索引鍵刪除索引:

db.student.dropIndex({name_1: 1 });

在上述示例中,我們通過對(duì)象字面量傳遞一個(gè)索引鍵 { email: 1 },MongoDB 將會(huì)刪除關(guān)聯(lián)到該鍵的索引。

我們還可以使用 dropIndexes() 函數(shù) 來刪除一個(gè)集合上的所有索引。

以下是刪除所有索引的示例:

db.student.dropIndexes();

刪除索引之前需要確保是否真的需要?jiǎng)h除,因?yàn)樗饕怯糜诩铀俨樵兊?。同時(shí),還需要注意刪除索引所帶來的可能的性能問題。

如果刪除的索引是頻繁使用的索引,那么從索引中讀取文檔的性能會(huì)降低,因?yàn)?MongoDB 會(huì)像查詢數(shù)據(jù)庫時(shí)一樣執(zhí)行全文檢索。

所以,在刪除索引之前,需要對(duì)索引的使用情況做充分的評(píng)估。

? MongoDB 索引使用原則

MongoDB 索引的使用原則與 MySQL 是一致的:

  • 數(shù)據(jù)量很大的集合必須創(chuàng)建索引,相反則不需要使用索引。
  • 如果集合的數(shù)據(jù)讀取多過寫入,也是需要?jiǎng)?chuàng)建索引的,因?yàn)樗饕嵘氖虏樵兊乃俣?;如果?shù)據(jù)的寫入多過了數(shù)據(jù)的讀取,設(shè)置索引提升不了寫入的速度,反而會(huì)拖慢寫入的速度。因?yàn)閷懭胄碌臄?shù)據(jù)或者修改數(shù)據(jù)都會(huì)引發(fā)數(shù)據(jù)的排序,因此就會(huì)影響到寫入的速度。
  • 并不是索引越多越好,那些經(jīng)常被用來當(dāng)做檢索條件的字段應(yīng)該設(shè)置索引,沒有被經(jīng)常當(dāng)做檢索條件的字段不需要設(shè)置索引。

以上就是MongoDB索引機(jī)制詳解的詳細(xì)內(nèi)容,更多關(guān)于MongoDB索引機(jī)制的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MongoDB與MySQL常用操作語句對(duì)照

    MongoDB與MySQL常用操作語句對(duì)照

    這篇文章主要介紹了MongoDB與MySQL常用操作語句對(duì)照,本文整合了兩篇博文,相信最常用的操作都收錄在本文了,需要的朋友可以參考下
    2015-05-05
  • MongoDB基礎(chǔ)之文檔操作

    MongoDB基礎(chǔ)之文檔操作

    這篇文章介紹了MongoDB基礎(chǔ)之文檔操作,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • MongoDB的查詢方法

    MongoDB的查詢方法

    這篇文章主要介紹了MongoDB的查詢方法,需要的朋友可以參考下
    2017-05-05
  • mongodb實(shí)現(xiàn)同庫聯(lián)表查詢方法示例

    mongodb實(shí)現(xiàn)同庫聯(lián)表查詢方法示例

    在關(guān)系型數(shù)據(jù)庫中,通過連接運(yùn)算符可以實(shí)現(xiàn)多個(gè)表聯(lián)合查詢。而非關(guān)系型數(shù)據(jù)庫的特點(diǎn)是表之間屬于弱關(guān)聯(lián),下面這篇文章主要給大家介紹了關(guān)于mongodb實(shí)現(xiàn)同庫聯(lián)表查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-08-08
  • MongoDB Windows安裝服務(wù)方法與注意事項(xiàng)

    MongoDB Windows安裝服務(wù)方法與注意事項(xiàng)

    這篇文章主要介紹了MongoDB Windows安裝服務(wù)方法與注意事項(xiàng)的相關(guān)資料,MongoDB作為一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫,近兩年大受追捧。數(shù)據(jù)靈活的存取方式和高效的處理使得它廣泛用于互聯(lián)網(wǎng)應(yīng)用,需要的朋友可以參考下
    2016-12-12
  • MongoDB 管道的介紹及操作符實(shí)例

    MongoDB 管道的介紹及操作符實(shí)例

    這篇文章主要介紹了MongoDB 管道的介紹及操作符實(shí)例的相關(guān)資料,MongoDB的聚合管道將MongoDB文檔在一個(gè)管道處理完畢后將結(jié)果傳遞給下一個(gè)管道處理,需要的朋友可以參考下
    2017-07-07
  • Win10 安裝 MongoDB 3.6.5 失敗的問題及解決方法

    Win10 安裝 MongoDB 3.6.5 失敗的問題及解決方法

    這篇文章主要介紹了Win10 安裝 MongoDB 3.6.5 失敗的問題及解決方法,需要的朋友可以參考下
    2018-05-05
  • windows7下使用MongoDB實(shí)現(xiàn)倉儲(chǔ)設(shè)計(jì)

    windows7下使用MongoDB實(shí)現(xiàn)倉儲(chǔ)設(shè)計(jì)

    本文給大家介紹了本人在物聯(lián)網(wǎng)環(huán)境下基于MongoDB實(shí)現(xiàn)的倉儲(chǔ)的配置信息及具體的使用示例,非常的實(shí)用,有需要的小伙伴可以參考下
    2017-09-09
  • MongoDB 模式設(shè)計(jì)詳解

    MongoDB 模式設(shè)計(jì)詳解

    這篇文章主要介紹了MongoDB 模式設(shè)計(jì)詳解的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • MongoDB快速入門筆記(一)之windows下安裝MongoDB方法

    MongoDB快速入門筆記(一)之windows下安裝MongoDB方法

    MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫。由 C++ 語言編寫。本文重點(diǎn)給大家介紹MongoDB快速入門筆記(一)之windows下安裝MongoDB方法,非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起看下吧
    2016-06-06

最新評(píng)論