mongodb建立索引

2021-07-11 16:47:55 字數 2914 閱讀 7592

mongodb 提供了多樣性的索引支援,索引資訊被儲存在system.indexes 中,且預設總是為_id建立索引,它的索引使用基本和mysql 等關係型資料庫一樣。其實可以這樣說說,索引是凌駕於資料儲存系統之上的另一層系統,所以各種結構迥異的儲存都有相同或相似的索引實現及使用介面並不足為 奇。

在字段age 上建立索引,1(公升序);-1(降序):

db.users.ensureindex()

_id 是建立表的時候自動建立的索引,此索引是不能夠刪除的。當系統已有大量資料時,建立索引就是個非常耗時的活,我們可以在後台執行,只需指定「backgroud:true」即可。

db.t3.ensureindex( , )

索引可以任何型別的字段,甚至文件:

db.factories.insert(  } );

//在addr 列上建立索引

db.factories.ensureindex( );

//下面這個查詢將會用到我們剛剛建立的索引

db.factories.find( } );

//但是下面這個查詢將不會用到索引,因為查詢的順序跟索引建立的順序不一樣

db.factories.find( } );

跟其它資料庫產品一樣,mongodb 也是有組合索引的,下面我們將在addr.city 和addr.state上建立組合索引。當建立組合索引時,字段後面的1 表示公升序,-1 表示降序,是用1 還是用-1 主要是跟排序的時候或指定範圍內查詢 的時候有關的。

db.factories.ensureindex(  );

//下面的查詢都用到了這個索引

db.factories.find( );

db.factories.find( );

db.factories.find().sort( );

db.factories.find().sort( )

只需在ensureindex 命令中指定」unique:true」即可建立唯一索引。例如,往表t4 中插入2 條記錄:

db.t4.ensureindex(, );

hint 命令可以強制使用某個索引。

db.t5.find(}).hint().explain()

//

刪除t3 表中的所有索引

db.t3.dropindexes()

//刪除t4 表中的firstname 索引

db.t4.dropindex()

mongodb 提供了乙個 explain 命令讓我們獲知系統如何處理查詢請求。利用 explain 命令,我們可以很好地觀察系統如何使用索引來加快檢索,同時可以針對性優化索引。

db.t5.ensureindex()

db.t5.ensureindex()

db.t5.find(}, ).explain()

}

字段說明:

在mysql 中,慢查詢日誌是經常作為我們優化資料庫的依據,那在mongodb 中是否有類似的功能呢?答案是肯定的,那就是mongodb database profiler。

有兩種方式可以控制 profiling 的開關和級別,第一種是直接在啟動引數裡直接進行設定。啟動mongodb 時加上–profile=級別 即可。也可以在客戶端呼叫db.setprofilinglevel(級別) 命令來實時配置,profiler 資訊儲存在system.profile 中。我們可以通過db.getprofilinglevel()命令來獲取當前的profile 級別,類似如下操作:

db.setprofilinglevel(2);

上面profile 的級別可以取0,1,2 三個值,他們表示的意義如下:

0 – 不開啟

1 – 記錄慢命令 (預設為》100ms)

2 – 記錄所有命令

profile 記錄在級別1 時會記錄慢命令,那麼這個慢的定義是什麼?上面我們說到其預設為100ms,當然有預設就有設定,其設定方法和級別一樣有兩種,一種是通過新增 –slowms 啟動引數配置。第二種是呼叫db.setprofilinglevel 時加上第二個引數:

db.setprofilinglevel( level , slowms )

db.setprofilinglevel( 1 , 10 );

與mysql 的慢查詢日誌不同,mongodb profile 記錄是直接存在系統db 裡的,記錄位置system.profile ,所以,我們只要查詢這個collection 的記錄就可以獲取到我們的 profile 記錄了。列出執行時間長於某一限度(5ms)的 profile 記錄:

db.system.profile.find(  } )

mongodb shell 還提供了乙個比較簡潔的命令show profile,可列出最近5 條執行時間超過1ms 的 profile 記錄。  

建立索引

限定返回結果數

只查詢使用到的字段

採用server side code execution

使用hint,強制使用索引

採用profiling

此工具可以從底層監控到底有哪些命令傳送給了mongodb 去執行,從中就可以進行分析:以root 身份執行:

$./mongosniff --source net lo

然後其會監控位到本地以localhost 監聽預設27017 埠的mongodb 的所有包請求。

此工具可以快速的檢視某組執行中的mongodb 例項的統計資訊 字段說明:

它每秒鐘重新整理一次狀態值,提供良好的可讀性,通過這些引數可以觀察到乙個整體的效能情況。

這個命令是最常用也是最基礎的檢視例項執行狀態的命令之一。

db.stats 檢視資料庫狀態資訊。

MongoDB索引建立(5)

索引建立 1 索引提高查詢速度,降低寫入速度,權衡常用的查詢字段,不必在太多列上建索引 2.在mongodb中,索引可以按欄位公升序 降序來建立,便於排序 3.預設是用btree來組織索引檔案,2.4版本以後,也允許建立hash索引.檢視查詢計畫 db.find query explain curs...

MongoDB索引管理 索引的建立 檢視 刪除

索引是提高查詢查詢效率最有效的手段。索引是一種特殊的資料結構,索引以易於遍歷的形式儲存了資料的部分內容 如 乙個特定的字段或一組字段值 索引會按一定規則對儲存值進行排序,而且索引的儲存位置在記憶體中,所在從索引中檢索資料會非常快。如果沒有索引,mongodb必須掃瞄集合中的每乙個文件,這種掃瞄的效率...

mongodb建立2D索引

1 mongodb支援二維空間索引,這是設計時考慮到基於位置的查詢。如果需要使用這種索引,應確定物件中儲存的字段是子物件或陣列,前兩個元素為x,y座標 2 插入資料 db.location.insert 3 建立索引 db.location.ensuerindex 4 near查詢 db.locat...