mongodb效能優化

2021-09-13 11:08:40 字數 1265 閱讀 3408

索引對於乙個資料庫的影響相信大家一定了解,如果乙個查詢命令進入到資料庫中後,查詢優化器沒有找到合適的索引,那麼資料庫會進行全集合掃瞄(在rdbms中也叫全表掃瞄),全集合查詢對於效能的影響是災難性的。沒有索引的查詢就如同在詞典那毫無規律的海量詞彙中獲得某個你想要的詞彙,但這個詞典是沒有目錄的,只能通過逐頁來查詢。這樣的查詢可能會讓你耗費幾個小時的時間,但如果要求你查詢詞彙的頻率如同使用者訪問的頻率一樣的話。。。嘿嘿,我相信你一定會大喊「老子不幹了!」。顯然計算機不會這樣喊,它一直是乙個勤勤懇懇的員工,不論多麼苛刻的請求他都會完成。

在mongodb中索引的型別與rdbms中大體一致,我們不做過多重複,我們來看一下在mongodb中如何才能更高效的利用索引。

1.索引越少越好

索引可以極大地提高查詢效能,那麼索引是不是越多越好?答案是否定的,並且索引並非越多越好,而是越少越好。每當你建立乙個索引時,系統會為你新增乙個索引表,用於索引指定的列,然而當你對已建立索引的列進行插入或修改時,資料庫則需要對原來的索引表進行重新排序,重新排序的過程非常消耗效能,但應對少量的索引壓力並不是很大,但如果索引的數量較多的話對於效能的影響可想而知。所以在建立索引時需要謹慎建立索引,要把每個索引的功能都要發揮到極致,也就是說在可以滿足索引需求的情況下,索引的數量越少越好。

一. 隱式索引

//建立復合索引

db.test.ensureindex()

我們在查詢時可以迅速的將age,no欄位進行排序,隱式索引指的是如果我們想要排序的字段包含在已建立的復合索引中則無需重複建立索引。

db.test.find().sort("age": 1,"no": 1)

db.test.find().sort("age": 1)

如以上兩個排序查詢,均可使用上面的復合索引,而不需要重新建立索引。

二. 翻轉索引

//建立復合索引

db.test.ensureindex()

翻轉索引很好理解,就是我們在排序查詢時無需考慮索引列的方向,例如這個例子中我們在查詢時可以將排序條件寫為"",依舊不會影響效能。

2.索引列顆粒越小越好

什麼叫顆粒越小越好?在索引列中每個資料的重複數量稱為顆粒,也叫作索引的基數。如果資料的顆粒過大,索引就無法發揮該有的效能。例如,我們擁有乙個"age"列索引,如果在"age"列中,30歲佔了40%,如果現在要查詢乙個30歲,名叫"tom"的人,我們則需要在表的40%的資料中查詢,索引的作用大大降低。所以,我們在建立索引時要盡量將資料顆粒小的列放在索引左側,以保證索引發揮最大的作用。

mongodb效能優化

建立索引是優化資料庫最直接的手段.遵循以下索引優化原則,可以建立比較高效和合理的索引.在索引中包含條件的所有列,可以使用索引形成的遮蔽來拒絕結果集中不合適的行 對於需要排序的引用列,適當地建立索引可以避免排序 考慮到管理上的開銷,應避免在索引中使用多於5個的列 對於多列索引,將查詢中引用最多的列放在...

mongodb效能優化教程

一般來說nosql的插入速度會比mysql等關係型資料庫的要快些才對,上次用golang實現了可以在mysql中以2w s速度的插入小資料。理論上mongodb的插入速度應該會比mysql快。但是經過測試發現,每次往mongodb插入一條資料的話,插入速度只有1600次每秒。測試 如下 packag...

Mongodb的效能優化問題

資料庫效能對軟體整體效能有著至關重要的影響,對於mongodb資料庫常用的效能優化方法主要有 正規化化與反正規化化 填充因子的使用 索引的使用 正規化是為了消除重複資料減少冗餘資料,從而讓資料庫內的資料更好的組織,讓磁碟空間得到更有效利用的一種標準化標準,滿足高等級的正規化的先決條件是滿足低等級正規...