索引是提高查詢查詢效率最有效的手段。索引是一種特殊的資料結構,索引以易於遍歷的形式儲存了資料的部分內容(如:乙個特定的字段或一組字段值),索引會按一定規則對儲存值進行排序,而且索引的儲存位置在記憶體中,所在從索引中檢索資料會非常快。如果沒有索引,mongodb必須掃瞄集合中的每乙個文件,這種掃瞄的效率非常低,尤其是在資料量較大時。
下面以關係型資料庫oracle為例,介紹索引的基本原理,如下圖所示:
從上圖可以看成,索引的本質其實就相當於是一本書的目錄。當查詢表中資料的時候,先查詢目錄(索引)中的行位址,再通過行位址查詢到表中的資料,從而提高查詢的效能。
下圖說明了在mongodb中,索引在查詢和排序中是如何工作的?
通過這個例子,可以清楚的看到索引儲存的是乙個特定字段或者幾個欄位的集合,並且按照一定的規律排序。當建立集合的時候,mongodb自動在_id上建立乙個唯一性索引,由於是唯一性的,所以可以防止重複的_id值插入到集合中。通過getindexes可以查詢到mongodb集合上的索引資訊,如下圖所示。
當沒有索引的時候,通過檢視執行計畫,可以看到查詢的過程,如下:查詢:10號部門,工資小於3000的文件。
那麼如何建立乙個簡單的索引呢?注意從mongodb 3.0開始ensureindex被廢棄,今後都僅僅是db.collection.createindex的乙個別名。
現在在deptno和sal上建立乙個索引,並重新檢視執行計畫:db.emp.createindex()
注意:除了可以使用explain()生成執行計畫外,還可以有幾個可選的引數,如下:
.explain(「allplan***ecution」)
.explain(「executionstats」)
.explain(「queryplanner」)
單鍵索引是最普通的索引,與_id索引不同,單鍵索引不會自動建立。
準備資料:
db.testindex1.insert(})
在單個列上建立單鍵索引:
db.testindex1.createindex()
在巢狀的列上建立單鍵索引
db.testindex1.createindex()
在內嵌的文件上建立單鍵索引
db.testindex1.createindex()
這樣將會把location作為乙個整體。
多鍵索引與單鍵索引建立形式相同,區別在於欄位的值。值具有多個記錄,如陣列。
如上圖,基於集合上的陣列建立多鍵索引,且陣列為內嵌文件。
準備資料:
db.testindex2.insertmany([,,
,,])下面基於ratings列建立乙個多鍵索引:
db.testindex2.createindex( )
查詢陣列上為5,9的文件
db.testindex2.find( )
下面檢視其執行計畫
趙強老師 MongoDB地理資訊資料的查詢
趙強老師 mongodb地理資訊資料的查詢 mongodb提供了一系列的索引和查詢機制來處理地理空間資訊。表面 在您儲存地理資料和編寫查詢條件前,首先,您必須選擇表面型別,這將被用在計算中。您所選擇的型別將會影響您的資料如何被儲存,建立的索引的型別,以及您的查詢的語法形式。mongodb提供了兩種表...
趙強老師 SQL的排序
趙強老師 sql的排序 在oracle中,表中是以非指定順序儲存行資料記錄的,它不管行插入資料庫的順序如何。要按列以公升序或降序查詢行記錄,必須明確指示oracle資料庫要如何去排序。selectcolumn 1,column 2,column 3,from table name order by ...
趙強老師 Oracle RMAN指令碼基礎
趙強老師 oracle rman指令碼基礎 rman在資料庫伺服器的幫助下實現資料庫檔案 控制檔案 資料庫檔案與控制檔案的映像副本 歸檔日誌檔案 資料庫伺服器引數檔案的備份。rman的特點 傳統的exp與expdp備份工具,只能實現乙個完整備份而不能增量備份,rman採用備份級別實現增量備份,在乙個...