建立索引是優化資料庫最直接的手段.遵循以下索引優化原則,可以建立比較高效和合理的索引.
在索引中包含條件的所有列,可以使用索引形成的遮蔽來拒絕結果集中不合適的行對於需要排序的引用列,適當地建立索引可以避免排序
考慮到管理上的開銷,應避免在索引中使用多於5個的列
對於多列索引,將查詢中引用最多的列放在定義的前面
不要在索引中包含經常修改或進行插入、刪除的列(主關鍵字和外來關鍵字除外)
「$」符號不可以作為索引的首字母,」.」不能在索引名的任何位置出現.
索引管理
1.建立索引的函式:ensureindex();
eg.在name上建立索引1(公升序),-1(降序),預設為公升序.db.person.ensureindex( );
當系統已有大量資料時,建立索引非常耗時,需要在後頭執行,只需要指定background:true即可.
db.user.ensureindex( , );
建立索引後,同一條查詢語句比較2次掃瞄的記錄條數.
> db.user.find( ).explain();
2.獲取集合中的索引資訊
db.person.getindexkeys();db.person.getindexes();
3.建立唯一索引
只需要在ensureindex命令中指定"unique:true"即可建立唯一索引
db.user.ensureindex( , );
建立了唯一索引的字段不允許插入相同的值.
4.建立組合索引
db.user.ensureindex(); //在user集合的addr.city和addr.state列上建立組合索引.
5.刪除索引
db.user.dropindexes(); //刪除usre表中的除過id外的所有索引
db.user.dropindex( ); //
刪除user表中的age索引
效能優化
explain 檢視執行計畫
mongodb提供了乙個explain命令讓我們獲知系統如何處理查詢請求,利用explain命令我們可以很好地觀察系統
如何使用索引來加快檢索,同時可以針對性優化索引.
優化器profile
mongodb database profiler是一種慢查詢日誌功能,可以作為我們優化資料庫的依據.
開啟profiling功能,有2種方式可以控制profiling的開關盒級別。
啟動monggodb時加上-profile=級別即可
在客戶端呼叫db.setprofilinglevel(級別)命令來實時配置。
profiler資訊儲存在system.profile中.我們可以通過db.getprofilinglevel()命令來獲取當前的profile級別.
profile的級別有3個,分別是0、1、2.預設沒有開啟
0 -表示不開啟1 - 表示記錄慢命令(預設為》100ms)
2 - 表示記錄所有命令
profile在級別1時會記錄慢命令,預設值為100ms,設定慢記錄的方法有2個
1.通過slowms啟動引數配置2.db.setprofilinglevel(1,設定ms引數)時加上第二個引數.
效能監控
通過對資料庫的效能監控,能夠更好的了解資料庫的工作狀態,從而進行優化.
幾個效能監控的工具:
1.mongosniff
此功能可以從底層監控到底有哪些命令傳送給mongodb去執行,
./mongosniff --source net lo
它是實時動態監視的,需要開啟另乙個客戶端進行命令操作.可以講這些資料輸出到乙個日誌檔案中,
那麼就可以保留下所有資料庫操作的歷史記錄,對於後期的效能分析和安全審計等工作將是乙個巨大的貢獻.
「lo」即loopback,指ip資料報會送到本機上,通常使用的是127.0.0.1作為回送位址,loopback通常用於檢測網路配置和本地程式之間通訊.
2.mongostat
此工具可以快速的檢視某組執行中的mongodb例項的統計資訊,也需要在開啟另乙個客戶端進行命令操作
./mongostat
3.db.serverstatus命令
該命令可以檢視伺服器執行狀態,是最基礎的檢視例項執行狀態的命令
4.db.stats命令
mongodb不但可以檢視例項級執行狀態資訊,而且可以通過執行」db.stats」命令檢視特定資料庫的詳細執行狀態,更細粒度地分析故障.
優化方案
優化方案1:建立索引
在查詢條件的字段上,或者排序條件的字段上建立索引,可以顯著提高執行效率.
db.user.ensureindex( );
優化方案2 : 限定返回結果條數
使用limit()限定返回結果集的大小,可以減少database server的資源消耗,可以減少網路傳輸資料量.
db.user.find().sort( ).limit(5);
優化方案3:查詢使用到的字段,不查詢所有字段
db.user.find( {} , ).sort( ).limit(5) ;
優化方案5:採用profiling
mongodb效能優化
索引對於乙個資料庫的影響相信大家一定了解,如果乙個查詢命令進入到資料庫中後,查詢優化器沒有找到合適的索引,那麼資料庫會進行全集合掃瞄 在rdbms中也叫全表掃瞄 全集合查詢對於效能的影響是災難性的。沒有索引的查詢就如同在詞典那毫無規律的海量詞彙中獲得某個你想要的詞彙,但這個詞典是沒有目錄的,只能通過...
mongodb效能優化教程
一般來說nosql的插入速度會比mysql等關係型資料庫的要快些才對,上次用golang實現了可以在mysql中以2w s速度的插入小資料。理論上mongodb的插入速度應該會比mysql快。但是經過測試發現,每次往mongodb插入一條資料的話,插入速度只有1600次每秒。測試 如下 packag...
Mongodb的效能優化問題
資料庫效能對軟體整體效能有著至關重要的影響,對於mongodb資料庫常用的效能優化方法主要有 正規化化與反正規化化 填充因子的使用 索引的使用 正規化是為了消除重複資料減少冗餘資料,從而讓資料庫內的資料更好的組織,讓磁碟空間得到更有效利用的一種標準化標準,滿足高等級的正規化的先決條件是滿足低等級正規...