国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
鑰匙要點
輔助索引
複合索引
多基索引
> Multikey Compound Index
索引限制和注意事項
摘要
?查詢的性能。其中包括單個字段,化合物,多基,文本,2D和2DDSPHERE索引。每種類型的索引都有特定的目的,用於不同類型的查詢。例如,單個字段和化合物索引分別用於單個或多個字段上的查詢。 Multikey索引用於數(shù)組,並且文本索引用於字符串內(nèi)容。
>您可以使用CreateIndex()方法在MongoDB中創(chuàng)建索引。如果索引尚不存在,則此方法在指定字段上創(chuàng)建索引。該方法採用兩個參數(shù):索引的字段或字段和一個允許您指定其他選項的選項文檔。
我可以在mongodb中刪除索引嗎?使用DropIndex()方法的mongodb。此方法從集合中刪除指定的索引。
>索引對MongoDB的寫操作的影響是什麼?
首頁 後端開發(fā) php教程 PHP主| mongodb索引,第1部分

PHP主| mongodb索引,第1部分

Feb 24, 2025 am 09:28 AM

PHP主| mongodb索引,第1部分

鑰匙要點

    在MongoDB中進行索引可以通過減少需要閱讀的完整文檔的數(shù)量來大大提高性能和吞吐量,從而提高應用程序性能。 MongoDB支持幾種類型的索引,包括默認_id索引,輔助索引,化合物索引,Multikey Index和Multikey化合物索引。每種類型都有特定的目的,用於不同類型的查詢。
  • >
  • >可以在集合上定義多個索引,但是查詢在執(zhí)行過程中只能使用一個索引。最好的索引是由MongoDB的Query-Optimizer選擇在運行時選擇的。
  • >
  • >索引可以大大改善閱讀操作,但也會造成自身成本。索引操作佔據(jù)空間,並在收藏集中的每個插入,更新和刪除操作上引起額外的開銷。因此,索引收益較重的收藏量比寫入較重的收藏。
  • 索引是與MongoDB合作的最重要概念之一。正確理解至關(guān)重要,因為索引可以通過減少要閱讀的完整文檔的數(shù)量來大大提高性能和吞吐量,從而提高應用程序的性能。因為索引很難理解,所以這個兩部分系列將仔細研究它們。 在本文中,我們將探討以下五種索引:
  • >默認_id索引
輔助索引
  1. 複合索引
  2. 多基索引
  3. > Multikey Compound Index
  4. 還有其他一些類型的討論,但是從邏輯上講,我將它們保留在第2部分中,以提供清晰的理解並避免任何混亂。 儘管可以在集合上定義多個索引,但是在執(zhí)行過程中,查詢只能使用一個索引。 MongoDB的查詢選項器在運行時做出最佳索引的決定。 本文假設您對MongoDB概念(例如集合,文檔等)有基本的了解,並使用PHP(例如查找和插入)進行基本查詢。如果沒有,我建議您閱讀我們的初學者文章:重新審視MongoDB和MongoDB的簡介。 對於該系列,我們將假設我們有一個名為帖子的帖子,其中填充了500個文檔,具有以下結(jié)構(gòu):
  5. 現(xiàn)在,讓我們詳細探討各種類型的索引。
  6. >默認_id索引
  7. 默認情況下,MongoDB在每個集合的_id字段上創(chuàng)建一個默認索引。每個文檔都有一個唯一的_id字段作為主鍵,一個12字節(jié)的objectid。如果沒有其他可用索引,則默認情況下將用於各種查詢。 要查看集合的索引,請打開MongoDB外殼並執(zhí)行以下操作:
<span>{
</span>    <span>"_id": <span>ObjectId</span>("5146bb52d852470060001f4"),
</span>    <span>"comments": {
</span>        <span>"0": "This is the first comment",
</span>        <span>"1": "This is the second comment"
</span>    <span>},
</span>    <span>"post_likes": 40,
</span>    <span>"post_tags": {
</span>        <span>"0": "MongoDB",
</span>        <span>"1": "Tutorial",
</span>        <span>"2": "Indexing"
</span>    <span>},
</span>    <span>"post_text": "Hello Readers!! This is my post text",
</span>    <span>"post_type": "private",
</span>    <span>"user_name": "Mark Anthony"
</span><span>}</span>

GetIndexes()方法返回我們集合的所有索引。如您所見,我們的默認索引帶有名稱_id_ 。密鑰字段表明索引在_id字段上,1的值表示升序順序。我們將在下一節(jié)中了解訂購。

輔助索引

對於要在_id字段以外的字段上使用索引的情況,我們必須定義自定義索引。假設我們要根據(jù)user_name字段搜索帖子。在這種情況下,我們將在集合的User_name字段上定義自定義索引。除默認索引外,此類自定義索引稱為輔助索引。 為了證明索引對數(shù)據(jù)庫的效果,讓我們簡要分析查詢性能而不先索引。為此,我們將執(zhí)行查詢,以查找所有具有“ Jim Alexandar”的user_name的帖子。
<span>{
</span>    <span>"_id": <span>ObjectId</span>("5146bb52d852470060001f4"),
</span>    <span>"comments": {
</span>        <span>"0": "This is the first comment",
</span>        <span>"1": "This is the second comment"
</span>    <span>},
</span>    <span>"post_likes": 40,
</span>    <span>"post_tags": {
</span>        <span>"0": "MongoDB",
</span>        <span>"1": "Tutorial",
</span>        <span>"2": "Indexing"
</span>    <span>},
</span>    <span>"post_text": "Hello Readers!! This is my post text",
</span>    <span>"post_type": "private",
</span>    <span>"user_name": "Mark Anthony"
</span><span>}</span>
解釋()返回與索引相關(guān)的信息。上述解釋()的輸出如下所示:

PHP主| mongodb索引,第1部分

值得一看的一些重要鍵是:
  1. 光標 - 指示查詢中使用的索引。 basiccursor表示使用了默認_id索引,MongoDB必須搜索整個集合。繼續(xù),我們會看到,當我們應用索引時,btreecursor將被使用而不是> basiccursor。
  2. n - 指示返回查詢的文檔數(shù)量(在這種情況下為一個文檔)。
  3. >
  4. nscannedObjects - 指示查詢搜索的文檔數(shù)量(在這種情況下,搜索了所有500個文檔)。如果集合中的文檔數(shù)量很大,則可以是一個大開銷的操作。 >
  5. nscanned - 指示在數(shù)據(jù)庫操作過程中掃描的文檔數(shù)量。
  6. 理想情況下,n應等於或接近NScann,這意味著搜索最少數(shù)量的文檔。 現(xiàn)在,讓我們執(zhí)行相同的查詢,但使用輔助索引。要創(chuàng)建索引,請在MongoDB Shell中執(zhí)行以下操作:

我們在user_name字段上創(chuàng)建了一個索引 在帖子中使用SuereIndex()方法集合。我敢肯定,您已經(jīng)將訂單參數(shù)的值置於該方法上,該方法指示搜索的上升(1)或降序(-1)訂單。為了更好地理解這一點,請注意每個文檔都有一個時間戳字段。如果我們首先想要最新的帖子,我們將使用降序訂單。對於最古老的帖子,我們將選擇上升訂單。 創(chuàng)建索引後,使用相同的find()和divell()方法來像以前一樣執(zhí)行和分析查詢。 IS的輸出: PHP主| mongodb索引,第1部分

輸出顯示查詢使用btreecursor命名user_name_1 (我們之前定義了),並且僅掃描了一個文檔,而不是與上一個查詢中搜索的500個文檔相反,而無需索引。 就目前而言,了解所有MongoDB索引都使用其算法中的BTREE數(shù)據(jù)結(jié)構(gòu),而Btreecursor是其默認光標。本文的詳細討論不範圍,但這不會影響任何進一步的理解。 以上比較表明索引如何顯著改善查詢性能。

複合索引

在某些情況下,查詢使用多個字段。在這種情況下,我們可以使用複合索引??紤]以下查詢,該查詢同時使用post_type和post_likes字段:
<span>{
</span>    <span>"_id": <span>ObjectId</span>("5146bb52d852470060001f4"),
</span>    <span>"comments": {
</span>        <span>"0": "This is the first comment",
</span>        <span>"1": "This is the second comment"
</span>    <span>},
</span>    <span>"post_likes": 40,
</span>    <span>"post_tags": {
</span>        <span>"0": "MongoDB",
</span>        <span>"1": "Tutorial",
</span>        <span>"2": "Indexing"
</span>    <span>},
</span>    <span>"post_text": "Hello Readers!! This is my post text",
</span>    <span>"post_type": "private",
</span>    <span>"user_name": "Mark Anthony"
</span><span>}</span>
用divell()分析此查詢,給出以下結(jié)果,這表明查詢使用基本cursor,所有500個文檔都被掃描以檢索一個文檔。

PHP主| mongodb索引,第1部分

這是高效的,所以讓我們應用一些索引。我們可以在字段上定義一個複合索引post_type和post_likes,如下所示:

PHP主| mongodb索引,第1部分

分析查詢現(xiàn)在給出以下結(jié)果:

PHP主| mongodb索引,第1部分

這裡非常重要的一點是,在多個字段上定義的化合物索引可用於查詢這些字段的子集。例如,假設有一個複合索引{field1,field2,field3}。該索引可用於查詢:
  • > field1
  • > field1,field2
  • > field1,field2,field3
因此,如果我們定義了索引{field1,field2,field3},則無需定義單獨的{field1}和{field1,field2} indexes。但是,如果我們在查詢field2和field2,field3時需要此化合物索引,則如果優(yōu)化器未選擇所需的索引,則可以使用shint()。 提示()方法可用於迫使mongoDB使用索引,我們指定並覆蓋默認選擇和查詢優(yōu)化過程。您可以將索引中使用的字段名稱指定為參數(shù),如下所示:
<span><span><?php
</span></span><span><span>// query to find posts with user_name "Jim Alexandar"
</span></span><span><span>$cursor = $collection->find(
</span></span><span>    <span>array("user_name" => "Jim Alexandar")
</span></span><span><span>);
</span></span><span><span>//  use explain() to get explanation of query indexes
</span></span><span><span>var_dump($cursor->explain());</span></span>
這樣可以確保查詢使用post_type和post_likes字段上定義的化合物索引。

多基索引

當在數(shù)組字段上完成索引時,稱為Multikey索引。再次考慮我們的郵政文件;我們可以在post_tags上應用多基索引。 Multikey索引將索引數(shù)組的每個元素,因此在這種情況下,將為post_tags value創(chuàng)建單獨的索引: mongodb > tutorial>很快。 但是,由於每個值的索引,數(shù)組字段上的索引都必須非常有選擇地使用,因為它們會消耗大量內(nèi)存。

> Multikey Compound Index

我們可以創(chuàng)建一個Multikey Compound索引,但是限制索引中最多可以是一個數(shù)組。因此,如果我們將field1作為字符串,而[field2,field3]作為數(shù)組,則無法定義索引{field2,field3},因為兩個字段都是數(shù)組。 在下面的示例中,我們在post_tags和user_name字段上創(chuàng)建索引:

PHP主| mongodb索引,第1部分

索引限制和注意事項

重要的是要知道,索引不能用於使用正則表達式,否定操作員(即$ ne,$ not等),算術(shù)運算符(即$ mod等),$中的JavaScript表達式的查詢中使用索引。條款,在其他情況下。 索引操作也有自己的成本。每個索引都佔據(jù)空間,並且在收集集合上的每個插入,更新和刪除操作上都會引起額外的開銷。您需要考慮每個集合的讀取比率:寫比率;索引對重讀收藏是有益的,但可能不適合寫入較重的收藏。 MongoDB將索引留在RAM中。確??偹饕笮〔怀^RAM限制。如果是這樣,將從RAM中刪除某些索引,因此查詢將減慢。此外,收集最多可以具有64個索引。

摘要

僅此而已??偠灾绻x擇了適當?shù)乃饕椒?,則索引對應用非常有益。在下一部分中,我們將考慮在嵌入式文檔,子插件和訂購上使用索引。敬請關(guān)注! 通過fotolia 圖像 經(jīng)常詢問有關(guān)mongoDB索引

的問題

> MongoDB在數(shù)據(jù)庫管理中索引的重要性是什麼?通過為數(shù)據(jù)提供更有效的途徑,它可以顯著提高數(shù)據(jù)庫操作的性能。如果沒有索引,MongoDB必須執(zhí)行集合掃描,即掃描集合中的每個文檔,以選擇與查詢語句匹配的文檔。使用索引,MongoDB可以將其搜索限制在數(shù)據(jù)的相關(guān)部分,從而減少所需掃描的數(shù)據(jù)量。這會導致查詢響應時間更快,並且CPU使用率較低,這在大型數(shù)據(jù)庫中尤其有益。

> MongoDB索引如何工作? mongoDB索引索引可以創(chuàng)建一個特殊的數(shù)據(jù)結(jié)構(gòu),該特殊數(shù)據(jù)結(jié)構(gòu)容納了集合數(shù)據(jù)的一小部分。該數(shù)據(jù)結(jié)構(gòu)包括特定字段或一組字段的值,該值按索引中指定的字段值排序。執(zhí)行查詢後,MongoDB使用這些索引來限制其必須檢查的文檔數(shù)量。當文檔的總大小超過可用的RAM時,索引特別有益。 >

?查詢的性能。其中包括單個字段,化合物,多基,文本,2D和2DDSPHERE索引。每種類型的索引都有特定的目的,用於不同類型的查詢。例如,單個字段和化合物索引分別用於單個或多個字段上的查詢。 Multikey索引用於數(shù)組,並且文本索引用於字符串內(nèi)容。

>

>如何在mongodb中創(chuàng)建索引?

>

>您可以使用CreateIndex()方法在MongoDB中創(chuàng)建索引。如果索引尚不存在,則此方法在指定字段上創(chuàng)建索引。該方法採用兩個參數(shù):索引的字段或字段和一個允許您指定其他選項的選項文檔。

我可以在mongodb中創(chuàng)建多個索引嗎? MongoDB的索引。但是,重要的是要注意,儘管索引提高了查詢性能,但它們還消耗了系統(tǒng)資源,尤其是磁盤空間和內(nèi)存。因此,至關(guān)重要的是明智地創(chuàng)建索引,並且僅在那些經(jīng)常查詢的領(lǐng)域中。 MongoDB很大程度上取決於您的應用程序的查詢模式。經(jīng)常在排序操作中查詢或使用的字段是索引的良好候選者。此外,具有高度唯一性的字段也是索引的良好候選者,因為它們可以在執(zhí)行查詢時大大減少MongoDB的文檔數(shù)量。您可以使用getIndexes()方法在mongodb中檢查索引是否存在。此方法返回集合上所有索引的列表,包括默認情況下創(chuàng)建的_id索引。

我可以在mongodb中刪除索引嗎?使用DropIndex()方法的mongodb。此方法從集合中刪除指定的索引。

> mongoDB中的索引相交是什麼? 。當沒有單個索引無法滿足查詢,但兩個或多個索引的交集可以。

時,這可能特別有用。

>索引對MongoDB的寫操作的影響是什麼?

>在索引時顯著改善了讀取操作的性能,它可能會對寫操作產(chǎn)生影響。這是因為每次插入或更新文檔時,集合上的所有索引也必須更新。因此,集合的索引越多,寫操作的越慢。在創(chuàng)建索引時,在閱讀性能和寫入表現(xiàn)之間找到平衡很重要。

以上是PHP主| mongodb索引,第1部分的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

對基於PHP的API進行版本控制的最佳實踐是什麼? 對基於PHP的API進行版本控制的最佳實踐是什麼? Jun 14, 2025 am 12:27 AM

基於toversionaphp,useUrl deuseUrl specteringforclarityAndEsofRouting,單獨的codetoavoidConflicts,dremecateOldVersionswithClearCommunication,andConsiderCustomHeadeSerlySerallyWhennEnncelsy.startbyplacingtheversionIntheUrl(E.G.,epi/api/v

如何在PHP中實施身份驗證和授權(quán)? 如何在PHP中實施身份驗證和授權(quán)? Jun 20, 2025 am 01:03 AM

tosecurelyhandleauthenticationandationallizationInphp,lofterTheSesteps:1.AlwaysHashPasswordSwithPassword_hash()andverifyusingspasspassword_verify(),usepreparedStatatementStopreventsqlineptions,andStoreSeruserDatain usseruserDatain $ _sessiveferterlogin.2.implementrole-2.imaccessccsccccccccccccccccccccccccc.

PHP中有哪些弱參考(弱圖),何時有用? PHP中有哪些弱參考(弱圖),何時有用? Jun 14, 2025 am 12:25 AM

PHPdoesnothaveabuilt-inWeakMapbutoffersWeakReferenceforsimilarfunctionality.1.WeakReferenceallowsholdingreferenceswithoutpreventinggarbagecollection.2.Itisusefulforcaching,eventlisteners,andmetadatawithoutaffectingobjectlifecycles.3.YoucansimulateaWe

PHP中的程序和麵向?qū)ο蟮木幊坦犂g有什麼區(qū)別? PHP中的程序和麵向?qū)ο蟮木幊坦犂g有什麼區(qū)別? Jun 14, 2025 am 12:25 AM

procemal and object-tiriendedprogromming(oop)inphpdiffersimplessintustructure,可重複使用性和datahandling.1.procedural-Progrogursmingusesfunctimesfunctionsormanized sequalized sequalized sequiential,poiperforsmallscripts.2.OpporganizesCodeOrganizescodeOdeIntsocloceSandObjects,ModelingReal-Worlden-Worlden

如何在PHP中安全地處理文件上傳? 如何在PHP中安全地處理文件上傳? Jun 19, 2025 am 01:05 AM

要安全處理PHP中的文件上傳,核心在於驗證文件類型、重命名文件並限制權(quán)限。 1.使用finfo_file()檢查真實MIME類型,僅允許特定類型如image/jpeg;2.用uniqid()生成隨機文件名,存儲至非Web根目錄;3.通過php.ini和HTML表單限製文件大小,設置目錄權(quán)限為0755;4.使用ClamAV掃描惡意軟件,增強安全性。這些步驟有效防止安全漏洞,確保文件上傳過程安全可靠。

PHP中==(鬆散比較)和===(嚴格的比較)之間有什麼區(qū)別? PHP中==(鬆散比較)和===(嚴格的比較)之間有什麼區(qū)別? Jun 19, 2025 am 01:07 AM

在PHP中,==與===的主要區(qū)別在於類型檢查的嚴格程度。 ==在比較前會進行類型轉(zhuǎn)換,例如5=="5"返回true,而===要求值和類型都相同才會返回true,例如5==="5"返回false。使用場景上,===更安全應優(yōu)先使用,==僅在需要類型轉(zhuǎn)換時使用。

如何與PHP的NOSQL數(shù)據(jù)庫(例如MongoDB,Redis)進行交互? 如何與PHP的NOSQL數(shù)據(jù)庫(例如MongoDB,Redis)進行交互? Jun 19, 2025 am 01:07 AM

是的,PHP可以通過特定擴展或庫與MongoDB和Redis等NoSQL數(shù)據(jù)庫交互。首先,使用MongoDBPHP驅(qū)動(通過PECL或Composer安裝)創(chuàng)建客戶端實例並操作數(shù)據(jù)庫及集合,支持插入、查詢、聚合等操作;其次,使用Predis庫或phpredis擴展連接Redis,執(zhí)行鍵值設置與獲取,推薦phpredis用於高性能場景,Predis則便於快速部署;兩者均適用於生產(chǎn)環(huán)境且文檔完善。

如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? 如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? Jun 19, 2025 pm 05:13 PM

PHP中使用基本數(shù)學運算的方法如下:1.加法用 號,支持整數(shù)和浮點數(shù),也可用於變量,字符串數(shù)字會自動轉(zhuǎn)換但不推薦依賴;2.減法用-號,變量同理,類型轉(zhuǎn)換同樣適用;3.乘法用*號,適用於數(shù)字及類似字符串;4.除法用/號,需避免除以零,並註意結(jié)果可能是浮點數(shù);5.取模用%號,可用於判斷奇偶數(shù),處理負數(shù)時餘數(shù)符號與被除數(shù)一致。正確使用這些運算符的關(guān)鍵在於確保數(shù)據(jù)類型清晰並處理好邊界情況。

See all articles