Mongodb常用索引介紹

      網友投稿 789 2022-05-29

      索引的作用:

      當一個集合數據量很大時,從這個集合中查找某條記錄時,會從這個集合的第一條順序查找起直到找到特定記錄或者查找完整個集合,這個查找時間會很長,查詢花費的時間幾十秒到幾分鐘。而索引是特殊的數據結構,索引存儲在一個易于遍歷讀取的數據集合中,當查找特定記錄時就從這個特殊的易于遍歷的數據結構中查找,查詢花費的時間大大的縮短。

      創建索引:

      MongoDB使用 createIndex () 方法來創建索引,具體命令:db.collection. createIndex ({key:1}),其中collection為要在集合上創建索引的集合名,?Key 值為你要創建的索引字段,1為指定按升序創建索引,-1為指定按降序創建索引。

      索引分類:

      單字段索引:

      只在一個字段上建立索引,db.collection. createIndex ({key:1}),這樣就在集合collection上的字段key創建了升序的單字段索引。建立了單字段索引后,就能加速對key字段的查詢速度。Mongodb對每個集合默認建立的_id字段就是一個單字段索引,也是唯一的主鍵。

      復合索引:

      db.collection. createIndex ({key:1,key1:1})建立在兩個字段key,key1上的復合索引,所謂復合索引就是針對多個字段聯合創建的索引,先按第一個字段排序,第一個字段相同的文檔按第二個字段排序,依次類推。復合索引不僅能滿足多個字段組合起來的查詢,也能滿足所以能匹配符合索引前綴的查詢。例如db.collection. createIndex ({key:1,key1:1})不僅能在字段key,key1上加速查詢,也能滿足只查找key字段的加速查詢。但如果只查找key1字段,則無法進行索引加速。如果經常在key1字段上查詢,則應該建立db.collection. createIndex ({key1:1,key:1})的符合索引。除了查詢的需求能夠影響索引的順序,字段的值分布也是一個重要的因素。如果 key字段的取值很有限,即擁有相同key字段的文檔會有很多;而key1字段的取值則豐富很多,擁有相同key1字段的文檔很少,則先按key1字段查找,再在相同key1的文檔里查找key字段更為高效。

      hash索引:

      db.collection.createIndex({key: "hashed"})這樣就在字段key上創建了hash索引,mongodb自動計算字段的hash值,無需用戶計算,hash索引只能進行字段的完全匹配查詢,不能進行范圍查詢。

      索引的一些特殊屬性:

      唯一索引:

      Mongodb常用索引介紹

      對于某些字段值,用戶希望是唯一的不重復的,這時就可以設置索引的屬性為唯一的。db.collection.createIndex({ key: 1 },{ unique: true })在創建key字段為索引的時候加上屬性字段unique建立的就是唯一單字段索引。db.collection.createIndex({ key: 1, key1: 1 },{ unique: true })創建的就是唯一復合索引。

      TTL索引:

      如果希望當某些記錄超過一段時間后,自動從數據庫里面被刪除,那就可以在建立索引的時候帶上TTL屬性,但需要滿足一個條件:建立TTL索引的那個字段必須是data類型的字段或者包含data類型的數組。db. collection.createIndex({ "lastModifiedDate": 1 }, { expireAfterSeconds: 3600 }),其中lastModifiedDate字段的類型必須是data或包含data的數組,這樣當lastModifiedDate字段的值距離當前時間值超過3600秒后就會被刪除。

      索引優化:

      當一個建立索引的查詢依然花費較長時間時,怎么看這個索引存在的問題呢?可以通過查詢計劃來決定如何優化。在查找語句后面加上.explain()例如: db.collection.find({key: 18}).explain(),通過查詢的執行計劃可以看出索引上是否存在問題:查詢的字段沒有建立索引,建立了索引但執行查詢時沒有使用預期的索引。

      數據結構 MongoDB

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:接口測試并不只是測試參數和返回值
      下一篇:如何加強自己對Java的編碼規范
      相關文章
      亚洲人色大成年网站在线观看| 亚洲狠狠久久综合一区77777| 亚洲欧洲日产国码在线观看| 亚洲AV第一页国产精品| 国产亚洲人成无码网在线观看| 亚洲精品无码成人片在线观看| 国产精品亚洲天堂| 亚洲av日韩aⅴ无码色老头| 亚洲中文字幕精品久久| 亚洲色成人网站WWW永久四虎| 在线综合亚洲欧洲综合网站| 中文字幕乱码亚洲精品一区| 亚洲制服丝袜中文字幕| 亚洲香蕉在线观看| 99亚偷拍自图区亚洲| 亚洲中文无码永久免费| 亚洲乱码日产精品一二三| 亚洲av日韩专区在线观看| 亚洲AV成人片无码网站| MM1313亚洲精品无码久久| jzzijzzij在线观看亚洲熟妇| 亚洲av无码无线在线观看| 五月天婷亚洲天综合网精品偷| 亚洲美女在线国产| 久久亚洲高清综合| 亚洲成a人片在线观看日本| 亚洲综合无码一区二区| 亚洲日本香蕉视频| 亚洲熟女综合色一区二区三区| 亚洲AV香蕉一区区二区三区| 亚洲AV无码之日韩精品| 亚洲欧洲久久av| 亚洲欧洲国产精品香蕉网| 亚洲av不卡一区二区三区| 亚洲精品在线电影| 亚洲 欧洲 自拍 另类 校园| 亚洲AV无码XXX麻豆艾秋| 久久久久亚洲av成人无码电影| 亚洲AV无码一区二区二三区软件 | 亚洲精品无码专区在线播放| 婷婷亚洲综合五月天小说在线|