MongoDB索引使用

2021-07-10 00:07:05 字數 2842 閱讀 9912



索引簡介

mongodb同傳統資料庫索引一樣,同樣使用的是b-tree索引,絕大多數優化mysql/oracle/sqllite索引技術也同樣適用於mongodb.

建立索引使用ensureindex方法

建立普通索引

> db.users1.find()

--在username欄位上建立正序索引

> db.users1.ensureindex()

--對下面查詢建立有效索引

> db.people.find().sort()

> db.people.ensureindex()

建立索引內嵌文件索引

--內嵌文件如下

> db.blog.posts.findone(),],

"content" : "...",

"title" : "a blog post"

}> db.bolg.posts.ensureindex()

建立唯一索引

> db.people.ensureindex(, )

--消除重複

當為已有的集合中建立唯一索引時,可能一些已經重複了。這時建立索引會失敗,有時可能需要把重複的文件都刪掉,dropdups選項就可以保留發現的第乙個文件,而刪除有重複的文件。

> db.people.ensureindex(, )

使用explain和hint

explain會返回查詢使用索引的情況,耗時及掃瞄文件的統計資訊。

> db.users1.find()

> db.users1.find().explain()

,"server" : "racdb:27017"

}如果發現mongodb使用了非預期的索引,可以使用hint強制使用某個索引。如:

> db.c.find().hint()

和oracle中使用hint一樣,hint多數情況下是沒必要指定的。因為mongodb非常智慧型,會替你選擇選擇使用如個索引。

管理索引

索引元資訊都在system.indexes集合中

> db.system.indexes.find()

, "name" : "_id_", "ns" : "test.my_collection" }

, "name" : "x_1", "ns" : "test.my_collection" }

, "name" : "_id_", "ns" : "test.people" }

......

, "name" : "_id_", "ns" : "test.stocks" }

, "ns" : "test.users1" }

, "ns" : "test.bolg.posts" }

, "ns" : "test.bolg.posts" }

--刪除索引

> db.users1.dropindexes()

--或是使用runcommand命令刪除索引

> db.runcommand()

--修改索引(重建索引)

當原來的索引不好用時,需要重建索引,這時可以使用backgroud選項使建立過程在後台執行,這樣會避免資料庫產生阻塞。

> db.users1.ensureindex(,)

地理空間索引

還有一查詢變得越來越流行:要找到離當前位置最近的n個場所,如要找到給定經緯度座標周圍最近的咖啡館。

mongodb為座標平面提供了專門的索引,稱作:地理空間索引

同樣可以用ensureindex來建立,只不過引數不是1或-1,而是"2d"

db.map.ensureindex()

"gps"必需是某種形式的一對值:乙個包含兩個元素的陣列或是包含兩個鍵的內嵌文件;鍵值名可以任意。如下:

} }預設情況下地理空間的範圍是-180~180(經緯度),要想用其它值,可以通過ensureindex選項指定最大最小值:

> db.star.trek.ensureindex(, )

這樣就建立了乙個2000光年見方的索引。

地理空間查詢方法

使用$near

返回離[40, -73]最近的10個文件

> db.map.find(}).limit(10)

或是:> db.runcommand();

查詢指定開頭內的文件

即將原來的$near換成$within

$within形狀引數文件(

矩形:使用"$box"

> db.map.find(}})

圓形:使用"$center"

> db.map.find(}})

復合地理空間索引

應用經常要找的東西不只是乙個地點。例如,使用者要找出周圍所有的咖啡店或披薩店。將地理空間索引與普通索引組合起來就可以滿足這種需求。

例如,要查詢"location"和"desc",就可以這樣建立索引:

> db.ensureindex()

然後就可能很快找到最近的咖啡館了

> db.map.find(, "desc" : "coffeeshop"}).limit(1)

mongoDB 索引使用

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

MongoDB索引的使用

索引通常能夠極大的提高查詢的效率,如果沒有索引,mongodb在讀取資料時必須掃瞄集合中的每個檔案並選取那些符合查詢條件的記錄。這種掃瞄全集合的查詢效率是非常低的,特別在處理大量的資料時,查詢可以要花費幾十秒甚至幾分鐘,這對 的效能是非常致命的。索引是特殊的資料結構,索引儲存在乙個易於遍歷讀取的資料...

MongoDB高階(高階索引使用)

案例 建立文件users tags music cricket blogs name clound 索引陣列字段,在陣列中建立索引,需要對陣列中的每個字段依次建立索引。所以在我們為陣列 tags 建立索引時,會為 music cricket blogs 三個值建立單獨的索引。案例 db.users....