MongoDB初探 細說索引

2021-06-21 03:24:43 字數 1984 閱讀 8076

一、索引操作

索引是為了優化查詢速度而生,mongodb的索引和其他關係型資料庫,比如mysql,oracle等的索引幾乎相同,對於它們的索引優化經驗同樣適用於mongodb。

1、建立索引

mongodb中建立索引是通過ensureindex操作完成的。下面測試了在使用索引和不使用索引下的效能差別,使用explain函式進行查詢效能分析。

插入測試資料:

不使用索引的查詢:

使用索引的查詢:

由以上測試可見,使用恰當的索引查詢可以大大優化查詢效率。

2、刪除索引

索引的元資訊儲存在每個資料庫的system.indexes集合中,該集合為保留集合,不能對其插入或刪除文件。

操作只能通過ensureindex或dropindexes進行。

二、唯一索引

唯一索引可以確保集合的每乙個文件的指定鍵都有唯一值。mongodb建立唯一索引的方式如下:

如果沒有對應的鍵,索引會將其作為null儲存。所以,如果對某個鍵建立了唯一索引,但插入了多個缺少該索引鍵的文件,則由於文件包含null值而導致插入失敗。

三、組合索引

通過為ensureindex的第乙個引數傳入多個鍵值的文件來實現組合索引的建立。組合索引適用於對多條件查詢的優化上,一般來說,如果索引包含n個鍵,則對於前幾個鍵的查詢都會有幫助。比如有個索引,實際上是有了,,等的索引,但使用,等索引的查詢則不會被優化。

四、地理空間索引

mongodb的地理空間索引用於處理平面座標的查詢,對於查詢離當前位置最近的n個場所非常適用,在lbs應用中經常使用。

1、建立空間索引

db.map.ensureindex()
"gps"鍵的值

必須是某種形式的一對值:乙個包含兩個元素的陣列或是包含兩個鍵(鍵名隨意)的內嵌文件,如下所示:

}}

預設情況下,地理空間索引假設值的範圍是

-180~180,這對於處理經緯度非常方便,也可以設定其範圍:

db.map.ensureindex(,)
2、查詢

通過find函式查詢:

將按照離座標點(40,80)由近及遠的方式將map集合的前5個文件返回。

db.map.find(}).limit(5)
通過資料庫命令查詢:

db.runcommand();
geonear和使用$near的find普通查詢類似,不過geonear還會返回每個文件到查詢點的距離。該距離以插入資料為單位,比如按照經緯度的角度插入,那距離就是經緯度。

具體其他空間索引的查詢請參考mongodb官方文件關於索引的介紹。

五、總結

對於索引的使用,要建立合適的索引,可以使用explain檢視當前索引的效果。如果索引不適合當前業務需求的話,就要修改或刪除,以免不必要或不恰當的索引對資料庫操作產生影響。畢竟索引需要消耗記憶體和檔案儲存。對於索引要實時維護,不要索引每乙個鍵。

MongoDB副本集初探

主節點 192.168 1.73 28000 備份節點1 192.168 1.73 28001 備份節點2 192.168 1.73 28002 tar zxvf mongodb linux x86 64 3.0 6.tgz 解壓 mv mongodb linux x86 64 3.0 6 usr ...

索引初探(二)

在sqlserver中分為兩種索引,一是聚集索引 一是費聚集索引。下面我就分別對兩種索引進行介紹並分析其區別和各自的特點。1.聚集索引 之前看過乙個比方,我覺得非常恰當這裡也用這個例子來說明兩種索引。我們的字典本身就像是乙個聚集索引,我們根據拼音查詢目錄,然後直接可以找到查詢字的頁,而字典正文就是按...

mongoDB 索引使用

一 索引基礎 mongodb的索引幾乎與傳統的關係型資料庫一模一樣,這其中也包括一些基本的優化技巧。下面是建立索引的命令 db.test.ensureindex 可以通過下面的名稱檢視索引是否已經成功建立 db.test.getindexes 刪除索引的命令是 db.test.dropindex 在...