成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Mongo索引學(xué)習(xí)筆記

tianhang / 2569人閱讀

摘要:索引使用場景優(yōu)加快查詢速度劣增刪改會(huì)產(chǎn)生額外的開銷占用空間返回集合中一半以上的數(shù)據(jù),全表掃描的效率高索引基礎(chǔ)基礎(chǔ)操作查看索引創(chuàng)建索引已有大量數(shù)據(jù)時(shí)可后臺(tái)執(zhí)行不阻塞刪除索引查看索引大小屬性索引順序?yàn)檎?,為逆序在?fù)合索引中需注意順序索引屬

索引使用場景

優(yōu):加快查詢速度

劣:增刪改會(huì)產(chǎn)生額外的開銷、占用空間

tips: 返回集合中一半以上的數(shù)據(jù),全表掃描的效率高

索引基礎(chǔ) 基礎(chǔ)操作

查看索引:db.test.getIndexes()

創(chuàng)建索引:db.test.ensureIndex({"username":1},{"background":true,"name":"index_test_name"}) //已有大量數(shù)據(jù)時(shí)可后臺(tái)執(zhí)行不阻塞

刪除索引: db.test.dropIndex({"username":1})

查看索引大?。?db.test.totalIndexSize()

屬性

索引順序:

1為正序,-1為逆序

在復(fù)合索引中需注意順序(id:1, age:-1)

索引屬性:

唯一性

db.test.ensureIndex({x:1,y:1},{unique:true})

稀疏性

db.test.ensureIndexx({},{sparse:true/false})
不稀疏(默認(rèn)):
1. 可插入不存在索引字段的數(shù)據(jù),null; 
2. 可篩選不存在字段: db.test.find({m:{$exist:ture}})
稀疏:
優(yōu)化分析方法

explain

獲知系統(tǒng)如何處理請求

cursor  返回游標(biāo)類型(BasicCursor或BtreeCursor)
nscanned  被掃描的文檔數(shù)量
n 返回的文檔數(shù)
millis  耗時(shí)(毫秒)
indexBounds  所使用的索引

hint

強(qiáng)制使用某個(gè)索引

db.test.find({"age":20}).hint({"name":1,"age":1}) // .hint(name_1_age_1)

profile

設(shè)置日志級別,記錄慢查詢

Tips

查詢條件順序自動(dòng)調(diào)整

能為前綴式的正則表達(dá)式命中索引(/^z/)

對需要大量sort的鍵建立索引,避免全部數(shù)據(jù)加載到內(nèi)存

$ne、$nin 不會(huì)使用索引

索引種類

_id索引

默認(rèn)生成唯一字段

單鍵索引

值為一個(gè)單一的值

db.test.ensureIndex({x:1})

多鍵索引

值具有多個(gè)記錄,如數(shù)組、內(nèi)嵌文檔

db.test.insert({x:[1,2,3,4]})

每一個(gè)索引字段最多包含一個(gè)數(shù)組

Y: {_id:1, a:[1,2], b:1, category:"A array"} 與 {_id:2, a:1, b:[1,2], category:"B array"}
N: {_id:3, a:[1,2], b:[1,2], category:"AB both array"}

查詢

//數(shù)組查詢
數(shù)組中包含: db.fruitshop.find({"fruits":"apple"})
包含多個(gè): db.fruitshop.find({"fruits":{"$all":["apple", "banana"]}})
精確匹配: db.fruitshop.find({"fruits":["apple","orange","pear"]}) //順序與數(shù)量一致
特定位置元素查詢: db.fruitshop.find({"fruits.1":"orange"})
查詢數(shù)組長度: db.fruitshop.find({"fruits":{"$size":3}}) //size不能和其他操作符連用,如"$gt"等
返回固定長度: db.fruitshop.find({"fruits":{"$slice":2}}) //前2個(gè)
              db.fruitshop.find({"fruits":{"$slice":-1}}) //后1個(gè)
              db.fruitshop.find({"fruits":{"$slice":[3,6]}}) //第4~7個(gè),無數(shù)據(jù)則返回[]

//內(nèi)嵌文檔
完全匹配: db.staff.find({"name":{"first":"joe","middle":"bush"}}) //順序與數(shù)量一致
鍵值對查詢: db.staff.find({"name.first":"joe","name.middle":"bush"}) //點(diǎn)表示法,在插入時(shí)鍵名不能包含點(diǎn)(約束)
多層內(nèi)嵌: elemMatch  db.blogs.find({"comment":{"$elemMatch":{"author":"joe", "score":{"$gte":3}}}}) //內(nèi)嵌文檔中匹配author和score條件
          where  db.fruitshop.find({"$where":function(){}}) //性能低,每個(gè)文檔轉(zhuǎn)換成一個(gè)javascript對象放入函數(shù)執(zhí)行

復(fù)合索引

多個(gè)條件,從左到右執(zhí)行

{a:1,b:1,c:1} => {a:1},{a:1,b:1},{a:1,b:1,c:1}

db.test.ensureIndex({x:1,y:1})

過期索引

一段時(shí)間后過期,刪除相應(yīng)數(shù)據(jù)(用戶的登錄信息、存儲(chǔ)的日志)

db.test.ensureIndex({time:1},{expireAfterSeconds:30})

限制

字段類型必須是ISODate或者ISODate數(shù)組(數(shù)組中最小的時(shí)間)
不能是復(fù)合索引(不能指定兩個(gè)過期時(shí)間)
刪除時(shí)間不精確(后臺(tái)進(jìn)程60s跑一次)

全文索引

字符串或者字符串?dāng)?shù)組可搜索

//建立索引
db.test.ensureIndex({title:"text"})
db.test.ensureIndex({key1:"text",key2:"text"}) //對多個(gè)字段創(chuàng)建全文索引
db.test.ensureIndex({$**:"text"}) //對所有字段建全文索引

//查找
不需要指定字段名稱: db.test.find({"$text":{"$search":"coffee"}}) //每個(gè)數(shù)據(jù)集合只允許創(chuàng)建一個(gè)全文索引(可針對一個(gè)、多個(gè)、全部字段)
查找多個(gè)關(guān)鍵詞(空格代表 或 操作): db.test.find({"$text":{"$search":"aa bb cc"}})
指定不包含詞(-代表 非 操作): db.test.find({"$text":{"$search":"aa bb -cc"}})
與關(guān)系操作: db.test.find({"$text":{"$search":""aa" "bb" "cc""}})
相似度查詢: db.test.find({"$text":{"$search":"aa bb"}},{"score:{"$meta":"textScore"}"}) //score字段得分越高,相關(guān)度越高
            db.test.find({"$text":{"$search":"aa bb"}},{"score":{"$meta":"textScore"}}).sort({"score":{"$meta":"textScore"}}) //score相關(guān)度排序
            
//限制
每次查詢只能指定一個(gè)$text
有了$text則hint(強(qiáng)制指定索引)不起作用
中文支持不好(企業(yè)版可支持)

地理位置索引

將點(diǎn)的位置存儲(chǔ),可以按位置查找其他點(diǎn)

2D索引
用于存儲(chǔ)和查找平面上的點(diǎn)

db.test.ensureIndex({w:"2d"})

//使用經(jīng)緯度表示
取值范圍 經(jīng)度[-180,180] 緯度[-90,90]
db.test.insert({w:[180,90]})

//查詢
使用$near查詢距離某個(gè)點(diǎn)最近的點(diǎn)(默認(rèn)返回100個(gè))
    db.test.find({"$near":[x,y]})
    db.test.find({w:{"$near":[x,y],"$maxDistance":"z"}}) //限制返回的最遠(yuǎn)距離
 
使用$geoWithin查詢某個(gè)形狀內(nèi)的點(diǎn)
    矩形($box:[[x1,y1],[x2,y2]]) db.test.find({w:{"$geoWithin:{"$box":[[0,0],[3,3]]}}"}})
    圓形($center:[[x,y],r])  db.test.find({w:{"$geoWithin":{"$center":[0,0],5}}})
    多邊形($polygon:[[x1,y1],[x2,y2],..)  db.test.find({w:{"$geoWithin":{"$polygon":[[0,0],[0,1],[2,5],[6,1]]}}})
    
使用$geoNear查詢,返回最大距離和平均距離等數(shù)據(jù)

相關(guān)擴(kuò)展:
《地理位置索引的實(shí)現(xiàn)原理》

2Dsphere索引
用于存儲(chǔ)和查找球面上的點(diǎn)

db.test.ensureIndex({key:"2dsphere"})

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/19317.html

相關(guān)文章

  • Mongo索引學(xué)習(xí)筆記

    摘要:索引使用場景優(yōu)加快查詢速度劣增刪改會(huì)產(chǎn)生額外的開銷占用空間返回集合中一半以上的數(shù)據(jù),全表掃描的效率高索引基礎(chǔ)基礎(chǔ)操作查看索引創(chuàng)建索引已有大量數(shù)據(jù)時(shí)可后臺(tái)執(zhí)行不阻塞刪除索引查看索引大小屬性索引順序?yàn)檎?,為逆序在?fù)合索引中需注意順序索引屬 索引使用場景 優(yōu):加快查詢速度 劣:增刪改會(huì)產(chǎn)生額外的開銷、占用空間 tips: 返回集合中一半以上的數(shù)據(jù),全表掃描的效率高 索引基礎(chǔ) 基礎(chǔ)操作 查看...

    nihao 評論0 收藏0
  • mongodb學(xué)習(xí)筆記

    摘要:我們常說的分表分庫分區(qū)等概念都屬于分片的實(shí)際體現(xiàn)。傳統(tǒng)分片做法是手工分表分庫。自動(dòng)分片技術(shù)是根據(jù)指定的片鍵自動(dòng)拆分?jǐn)?shù)據(jù)并維護(hù)數(shù)據(jù)請求路由的過程。 1.mongodb特性 1)mongo是一個(gè)面向文檔的數(shù)據(jù)庫,它集合了nosql和sql數(shù)據(jù)庫兩方面的特性。 2)所有實(shí)體都是在首次使用時(shí)創(chuàng)建。 3)沒有嚴(yán)格的事務(wù)特性,但是它保證任何一次數(shù)據(jù)變更都是原子性的。 4)也沒有固定的數(shù)據(jù)模型 5)...

    王晗 評論0 收藏0
  • mongoDB 學(xué)習(xí)筆記純干貨(mongoose、增刪改查、聚合、索引、連接、備份與恢復(fù)、監(jiān)控等等)

    摘要:集合名命名規(guī)范集合名不能是空字符串。集合名不能含有字符空字符,這個(gè)字符表示集合名的結(jié)尾。集合名不能以開頭,這是為系統(tǒng)集合保留的前綴。有些驅(qū)動(dòng)程序的確支持在集合名里面包含,這是因?yàn)槟承┫到y(tǒng)生成的集合中包含該字符。 原始文章鏈接 - 我的博客:http://www.lovebxm.com/2017/0... MongoDB - 簡介 官網(wǎng):https://www.mongodb.com/ ...

    Java3y 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<