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

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

PHP主| mongodb索引,第1部分

Feb 24, 2025 am 09:28 AM

PHP主| mongodb索引,第1部分

鑰匙要點(diǎn)

    在MongoDB中進(jìn)行索引可以通過減少需要閱讀的完整文檔的數(shù)量來大大提高性能和吞吐量,從而提高應(yīng)用程序性能。 MongoDB支持幾種類型的索引,包括默認(rèn)_id索引,輔助索引,化合物索引,Multikey Index和Multikey化合物索引。每種類型都有特定的目的,用于不同類型的查詢。
  • >
  • >可以在集合上定義多個(gè)索引,但是查詢?cè)趫?zhí)行過程中只能使用一個(gè)索引。最好的索引是由MongoDB的Query-Optimizer選擇在運(yùn)行時(shí)選擇的。
  • >
  • >索引可以大大改善閱讀操作,但也會(huì)造成自身成本。索引操作占據(jù)空間,并在收藏集中的每個(gè)插入,更新和刪除操作上引起額外的開銷。因此,索引收益較重的收藏量比寫入較重的收藏。
  • 索引是與MongoDB合作的最重要概念之一。正確理解至關(guān)重要,因?yàn)樗饕梢酝ㄟ^減少要閱讀的完整文檔的數(shù)量來大大提高性能和吞吐量,從而提高應(yīng)用程序的性能。因?yàn)樗饕茈y理解,所以這個(gè)兩部分系列將仔細(xì)研究它們。 在本文中,我們將探討以下五種索引:
  • >默認(rèn)_id索引
輔助索引
  1. 復(fù)合索引
  2. 多基索引
  3. > Multikey Compound Index
  4. 還有其他一些類型的討論,但是從邏輯上講,我將它們保留在第2部分中,以提供清晰的理解并避免任何混亂。 盡管可以在集合上定義多個(gè)索引,但是在執(zhí)行過程中,查詢只能使用一個(gè)索引。 MongoDB的查詢選項(xiàng)器在運(yùn)行時(shí)做出最佳索引的決定。 本文假設(shè)您對(duì)MongoDB概念(例如集合,文檔等)有基本的了解,并使用PHP(例如查找和插入)進(jìn)行基本查詢。如果沒有,我建議您閱讀我們的初學(xué)者文章:重新審視MongoDB和MongoDB的簡介。 對(duì)于該系列,我們將假設(shè)我們有一個(gè)名為帖子的帖子,其中填充了500個(gè)文檔,具有以下結(jié)構(gòu):
  5. 現(xiàn)在,讓我們?cè)敿?xì)探討各種類型的索引。
  6. >默認(rèn)_id索引
  7. 默認(rèn)情況下,MongoDB在每個(gè)集合的_id字段上創(chuàng)建一個(gè)默認(rèn)索引。每個(gè)文檔都有一個(gè)唯一的_id字段作為主鍵,一個(gè)12字節(jié)的objectid。如果沒有其他可用索引,則默認(rèn)情況下將用于各種查詢。 要查看集合的索引,請(qǐng)打開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()方法返回我們集合的所有索引。如您所見,我們的默認(rèn)索引帶有名稱_id_ 。密鑰字段表明索引在_id字段上,1的值表示升序順序。我們將在下一節(jié)中了解訂購。

輔助索引

對(duì)于要在_id字段以外的字段上使用索引的情況,我們必須定義自定義索引。假設(shè)我們要根據(jù)user_name字段搜索帖子。在這種情況下,我們將在集合的User_name字段上定義自定義索引。除默認(rèn)索引外,此類自定義索引稱為輔助索引。 為了證明索引對(duì)數(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. 光標(biāo) - 指示查詢中使用的索引。 basiccursor表示使用了默認(rèn)_id索引,MongoDB必須搜索整個(gè)集合。繼續(xù),我們會(huì)看到,當(dāng)我們應(yīng)用索引時(shí),btreecursor將被使用而不是> basiccursor。
  2. n - 指示返回查詢的文檔數(shù)量(在這種情況下為一個(gè)文檔)。
  3. >
  4. nscannedObjects - 指示查詢搜索的文檔數(shù)量(在這種情況下,搜索了所有500個(gè)文檔)。如果集合中的文檔數(shù)量很大,則可以是一個(gè)大開銷的操作。>
  5. nscanned - 指示在數(shù)據(jù)庫操作過程中掃描的文檔數(shù)量。
  6. 理想情況下,n應(yīng)等于或接近NScann,這意味著搜索最少數(shù)量的文檔。 現(xiàn)在,讓我們執(zhí)行相同的查詢,但使用輔助索引。要?jiǎng)?chuàng)建索引,請(qǐng)?jiān)贛ongoDB Shell中執(zhí)行以下操作:

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

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

復(fù)合索引

在某些情況下,查詢使用多個(gè)字段。在這種情況下,我們可以使用復(fù)合索引??紤]以下查詢,該查詢同時(shí)使用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個(gè)文檔都被掃描以檢索一個(gè)文檔。

PHP主| mongodb索引,第1部分

這是高效的,所以讓我們應(yīng)用一些索引。我們可以在字段上定義一個(gè)復(fù)合索引post_type和post_likes,如下所示:

PHP主| mongodb索引,第1部分

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

PHP主| mongodb索引,第1部分

這里非常重要的一點(diǎn)是,在多個(gè)字段上定義的化合物索引可用于查詢這些字段的子集。例如,假設(shè)有一個(gè)復(fù)合索引{field1,field2,field3}。該索引可用于查詢:
  • > field1
  • > field1,field2
  • > field1,field2,field3
因此,如果我們定義了索引{field1,field2,field3},則無需定義單獨(dú)的{field1}和{field1,field2} indexes。但是,如果我們?cè)诓樵僨ield2和field2,field3時(shí)需要此化合物索引,則如果優(yōu)化器未選擇所需的索引,則可以使用shint()。 提示()方法可用于迫使mongoDB使用索引,我們指定并覆蓋默認(rèn)選擇和查詢優(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字段上定義的化合物索引。

多基索引

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

> Multikey Compound Index

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

PHP主| mongodb索引,第1部分

索引限制和注意事項(xiàng)

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

摘要

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

的問題

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

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

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

>

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

>

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

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

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

> mongoDB中的索引相交是什么? 。當(dāng)沒有單個(gè)索引無法滿足查詢,但兩個(gè)或多個(gè)索引的交集可以。

時(shí),這可能特別有用。

>索引對(duì)MongoDB的寫操作的影響是什么?

>在索引時(shí)顯著改善了讀取操作的性能,它可能會(huì)對(duì)寫操作產(chǎn)生影響。這是因?yàn)槊看尾迦牖蚋挛臋n時(shí),集合上的所有索引也必須更新。因此,集合的索引越多,寫操作的越慢。在創(chuàng)建索引時(shí),在閱讀性能和寫入表現(xiàn)之間找到平衡很重要。

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

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

如何在PHP中實(shí)施身份驗(yàn)證和授權(quán)? 如何在PHP中實(shí)施身份驗(yàn)證和授權(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 19, 2025 am 01:05 AM

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

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

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

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

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

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

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

我如何了解最新的PHP開發(fā)和最佳實(shí)踐? 我如何了解最新的PHP開發(fā)和最佳實(shí)踐? Jun 23, 2025 am 12:56 AM

TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource

什么是PHP,為什么它用于Web開發(fā)? 什么是PHP,為什么它用于Web開發(fā)? Jun 23, 2025 am 12:55 AM

PHPbecamepopularforwebdevelopmentduetoitseaseoflearning,seamlessintegrationwithHTML,widespreadhostingsupport,andalargeecosystemincludingframeworkslikeLaravelandCMSplatformslikeWordPress.Itexcelsinhandlingformsubmissions,managingusersessions,interacti

如何設(shè)置PHP時(shí)區(qū)? 如何設(shè)置PHP時(shí)區(qū)? Jun 25, 2025 am 01:00 AM

tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()

See all articles