1、我們知道如果索引使用的得當,會大幅提公升查詢速度,而如果使用不當有可能會使整個操作效能下降所以在建立索引的時候要考慮如下幾點:
(1)、會做什麼樣的查詢,哪些鍵需要建立索引
(2)、每個鍵的索引方向是怎麼樣的
(3)、如何應對擴充套件,怎麼排序鍵的方向,使更多常用的資料儲存在記憶體中
2、這裡注意一下,建立索引的時候可以使用 1,-1 建立不同方向的索引
3、使用ensureindex() 在指定的鍵上建立索引
4、建立普通索引:使用 ensureindex()函式
例:db.mytest.ensureindex()
//mytest集合中文件的age鍵建立乙個方向為「1」的索引
5、內嵌文件建立索引:
例:db.mytest.ensureindex()
//在mytest這個集合的comment這個鍵的data鍵上建立索引,內嵌索引和一般的索引是一樣的!
6、為排序(sort)做索引,如果沒有索引,或呼叫了沒有建立索引的鍵值進行排序,則mongodb會將所有資料載入到內從進行排序,這樣如果數量大,不能再記憶體中進行排序則會報錯,
7、索引的名稱預設按照:keyname1_dirx_keyname2_dirx的格式來顯示,其中的keyname1 就是預設的索引名稱,dirx就是建立的索引的方向
8、索引名的檢視:indexs.find()
例:db.mytest.indexs.find();
// 檢視在mytest集合下的所有的索引
9、建立索引時,自定義索引名稱:
例:db.mytest.ensureindex(,)
// 在mytest集合中文件的age鍵創方向為1的索引,索引名稱為indexname
10、唯一索引:唯一索引可以保證集合中每乙個文件的指定鍵都有唯一值
例:db.mytest.ensureindex(,)
// 在mytest集合中的文件的name鍵建立唯一索引,那麼集合中文件的name鍵的值不會有重複的!
11、消除重複值:當我們在乙個集合中先建立了文件,而其中有些文件的值值重複的,這時我們建立唯一索引,選擇dropdups這個選項則會把第一索引到的文件儲存,之後的就會被刪除!
例:db.mytest.ensureindex(,)
//mytest集合下文件的name鍵建立方向為『1』的唯一索引,如果文件的name鍵的值有重複,則保留第乙個檢索到的值,而之後的文件就會被刪除
12、復合唯一索引:這個和結構化資料庫表的鍵很相似,如果這個表的鍵是乙個屬性確定的則這個屬性的值不能相同,而如果這個鍵是由兩個或多個屬性組成,則只要這多個屬性的值組合起來你能唯一確定一行資料就可以,而單個屬性的值可以相同,這個和唯一索引,復合唯一索引的定義表達同樣的意思
例:db.mytest.ensureindex(,)
// 在mytest這個集合下的文件的name id 鍵建立復合唯一索引,mytest集合下的文件的name或id可以重複,而兩值一起只能確定乙個文件,不能重複!
13、使用explain()工具檢視具體資訊:
例:db.mytest.find().explain()
// mytest集合中有8個文件
// cursor:'basiccursor' 說明這個查詢沒有使用索引,這個正常因為查詢沒有條件
// nscanned: 代表資料庫查詢了多少個文件
// n代表資料返回的文件的數量
// millis:毫秒數代表查詢使用的時間
14、有查詢條件的看看索引
例:db.mytest.find().explain()
// 第一行資料就發生了變化,使用了btree索引,索引名稱是age_1
//nscanned:查詢的文件樹變為一,因為有索引,所以不會進行全表掃瞄,所以查詢的文件數變少
1、修改索引:我們知道建立索引會費時,浪費資源,在建立索引期間,所有的資料庫的請求都會被阻塞,為了能夠正常請求資料庫我們可以將索引的建立在後台進行執行。
2、使用 選項可以將索引的建立在後台執行,這樣就可以正常請求資料庫,但有個缺點就是,索引的建立相對會慢一些!
3、刪除索引: collection.dropindex()
例:db.mytest.dropindex()
// 從mytest這個集合中的文件的age這個鍵上建立的索引
4、刪除所有索引: dropindexes()
例:db.mytest.dropindexes()
// 刪除這個集合下的文件的多個鍵上建立的所有索引,包括_id 上的索引,通過執行結果可以看到!
5、之前說到mongodb的索引的建立使用 1,-1 來表示方向的,而mongodb還能建立地理空間索引,地理空間索引的建立使用'2d'來表示而不再是 1,-1
6、建立2d索引:ensureindex()建立地理空間索引的鍵是有要求的:鍵的值必須是一對值,或乙個資料或一對鍵值對
例:db.mytest.insert()
db.mytest.insert() ….
db.mytest.insert()
新增多條資料
建立地理空間索引:
例:db.mytest.ensureindex()
7、地理空間索引查詢:使用 $near
從中查詢離[5,5]最近的兩個點:例:db.mytest.find(}).limit(2)
8、按照圖形來查詢:方形}
例:db.mytest.find(}})
9、按照圖形查詢:圓形}
例:db.mytest.find(}})
//[[3,3],1]以3,3 作為圓心,以1作為半徑,查詢離圓心由近到遠的點
注意:這裡只是總結了mongodb中索引相關的命令,而怎麼建立高效能的索引及索引相關知識點深入學習可以學習mysql的索引,因為他們的索引的理念是一樣的!
mongodb索引相關
索引是提高查詢查詢效率最有效的手段。索引是一種特殊的資料結構,索引以易於遍歷的形式儲存了資料的部分內容 如 乙個特定的字段或一組字段值 索引會按一定規則對儲存值進行排序,而且索引的儲存位置在記憶體中,所在從索引中檢索資料會非常快。如果沒有索引,mongodb必須掃瞄集合中的每乙個文件,這種掃瞄的效率...
mongodb的索引相關
最近開始使用mongodb,用了一段時間後,發現有索引的需求。就把學習和使用過程寫下來。先使用mongodb的shell模式,然後再用python通過pymongo使用來試試。新建索引 db.collection.createindex 如 db.collection.createindex 索引型...
mongodb賬號相關命令
使用 mongo 命令列客戶端 建立使用者授權資料庫 use 資料庫 db.createuser 修改mongodb配置,然後重啟 注釋掉這行 允許非本機訪問 bind ip 127.0.0.1 bind ip 0.0.0.0 開啟auth認證 使用使用者名稱密碼驗證 turn on off sec...