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

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

輔助索引

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

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

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

複合索引

在某些情況下,查詢使用多個字段。在這種情況下,我們可以使用複合索引??紤]以下查詢,該查詢同時使用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部分

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

PHP主| mongodb索引,第1部分

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

PHP主| mongodb索引,第1部分

這裡非常重要的一點(diǎn)是,在多個字段上定義的化合物索引可用於查詢這些字段的子集。例如,假設(shè)有一個複合索引{field1,field2,field3}。該索引可用於查詢:
  • > field1
  • > field1,field2
  • > field1,field2,field3
因此,如果我們定義了索引{field1,field2,field3},則無需定義單獨(dú)的{field1}和{field1,field2} indexes。但是,如果我們在查詢field2和field2,field3時需要此化合物索引,則如果優(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ù)組字段上完成索引時,稱為Multikey索引。再次考慮我們的郵政文件;我們可以在post_tags上應(yīng)用多基索引。 Multikey索引將索引數(shù)組的每個元素,因此在這種情況下,將為post_tags value創(chuàng)建單獨(dú)的索引: mongodb > tutorial>很快。 但是,由於每個值的索引,數(shù)組字段上的索引都必須非常有選擇地使用,因?yàn)樗鼈儠拇罅績?nèi)存。

> Multikey Compound Index

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

PHP主| mongodb索引,第1部分

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

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

摘要

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

的問題

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

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

>

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

>

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

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

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

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

時,這可能特別有用。

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

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

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

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

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版

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

我如何了解最新的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時區(qū)? 如何設(shè)置PHP時區(qū)? Jun 25, 2025 am 01:00 AM

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

我如何驗(yàn)證PHP中的用戶輸入以確保其符合某些標(biāo)準(zhǔn)? 我如何驗(yàn)證PHP中的用戶輸入以確保其符合某些標(biāo)準(zhǔn)? Jun 22, 2025 am 01:00 AM

TovalidateuserinputinPHP,usebuilt-invalidationfunctionslikefilter_var()andfilter_input(),applyregularexpressionsforcustomformatssuchasusernamesorphonenumbers,checkdatatypesfornumericvalueslikeageorprice,setlengthlimitsandtrimwhitespacetopreventlayout

編寫清潔和可維護(hù)的PHP代碼的最佳實(shí)踐是什麼? 編寫清潔和可維護(hù)的PHP代碼的最佳實(shí)踐是什麼? Jun 24, 2025 am 12:53 AM

寫乾淨(jìng)、易維護(hù)的PHP代碼關(guān)鍵在於清晰命名、遵循標(biāo)準(zhǔn)、合理結(jié)構(gòu)、善用註釋和可測試性。 1.使用明確的變量、函數(shù)和類名,如$userData和calculateTotalPrice();2.遵循PSR-12標(biāo)準(zhǔn)統(tǒng)一代碼風(fēng)格;3.按職責(zé)拆分代碼結(jié)構(gòu),使用MVC或Laravel式目錄組織;4.避免麵條式代碼,將邏輯拆分為單一職責(zé)的小函數(shù);5.在關(guān)鍵處添加註釋並撰寫接口文檔,明確參數(shù)、返回值和異常;6.提高可測試性,採用依賴注入、減少全局狀態(tài)和靜態(tài)方法。這些做法提升代碼質(zhì)量、協(xié)作效率和後期維護(hù)便利性。

什麼是php(serialize(),Unserialize())中的數(shù)據(jù)序列化? 什麼是php(serialize(),Unserialize())中的數(shù)據(jù)序列化? Jun 22, 2025 am 01:03 AM

thephpfunctionserize()andunSerialize()redustoconvertComplexdatStructDestoresToroStoroStoroSandaBackagagain.1.Serialize()

如何將PHP代碼嵌入HTML文件中? 如何將PHP代碼嵌入HTML文件中? Jun 22, 2025 am 01:00 AM

可以將PHP代碼嵌入HTML文件中,但需確保文件以.php為擴(kuò)展名,以便服務(wù)器能正確解析。使用標(biāo)準(zhǔn)的標(biāo)籤包裹PHP代碼,可在HTML中任意位置插入動態(tài)內(nèi)容。此外,可在同一文件中多次切換PHP與HTML,實(shí)現(xiàn)條件渲染等動態(tài)功能。務(wù)必注意服務(wù)器配置及語法正確性,避免因短標(biāo)籤、引號錯誤或遺漏結(jié)束標(biāo)籤導(dǎo)致問題。

如何使用PHP執(zhí)行SQL查詢? 如何使用PHP執(zhí)行SQL查詢? Jun 24, 2025 am 12:54 AM

Yes,youcanrunSQLqueriesusingPHP,andtheprocessinvolveschoosingadatabaseextension,connectingtothedatabase,executingqueriessafely,andclosingconnectionswhendone.Todothis,firstchoosebetweenMySQLiorPDO,withPDObeingmoreflexibleduetosupportingmultipledatabas

See all articles