MongoDB索引

準備階段

插入10W條數(shù)據(jù)測試準備:
插入10W條數(shù)據(jù)

MongoDB性能分析函數(shù)(explain)

性能分析函數(shù)
cursor #查詢方式   BasicCursor:順序查找即“表掃描”
n #最終返回文檔數(shù)量
nscanned #數(shù)據(jù)庫瀏覽了10w個文檔
millis #總共耗時50毫秒

查看索引

db.age.getIndexes()

查看索引


命名索引

db.age.ensureIndex({"name":1},{name:"normal_index"})


刪除索引

db.age.dropIndex("name_1")
刪除索引

創(chuàng)建索引

單鍵索引

db.age.ensureIndex({"name":1})
單鍵索引
創(chuàng)建索引性能對比:

創(chuàng)建索引性能對比


唯一索引

重復的鍵值自然就不能插入
db.age.ensureIndex({"name":1},{unique:true})


稀疏索引

沒有此字段的數(shù)據(jù)不建立索引,節(jié)約磁盤
db.age.ensureIndex({"name":1},{sparse:true/false})


組合索引

db.age.ensureIndex({"name":1,"age":1})
db.age.ensureIndex({"age":1,"name":1})

查看組合索引


過期索引

一段時間后會過期的索引
在索引過期后,相應的數(shù)據(jù)會被刪除
適合存儲在一段時間之后會失效的數(shù)據(jù),比如用戶的登錄信息、存儲的日志等。
db.age.ensureIndex({time:1},{expireAfterSeconds:30}) #索引30秒后失效
db.age.insert({time:new Date()}) #time必須為ISODate或者ISODate數(shù)組,不能為時間戳


全文索引

創(chuàng)建
db.age.ensureIndex({key:"text"}) #key:字段名,value:固定字符串text

db.age.ensureIndex({key1:"text",key2:"text"}) #在多個字段上創(chuàng)建全文索引

db.age.ensureIndex({"$**":"text"}) #給所有字段建立全文索引
查詢
db.age.find({$text:{$search:"coffee"}})

db.age.find({$text:{$search:"aa bb cc"}}) #空格代表或操作,aa或bb或cc

db.age.find({$text:{$search:"aa bb -cc"}}) #-號為非操作,即不包含cc的

db.age.find({$text:{$search: "\"aa\" \"bb\" \"cc\""}}) #""號為與操作,aa與bb與cc
查詢返回相似度
db.age.find({$text:{$search:"aa bb"}},{score:{$meta:"textScore"}})

db.age.find({$text:{$search:"aa bb"}},{score:{$meta:"textScore"}}).sort({score:{$meta:"textScore"}}) #返回相似度并排序
全局索引的限制:
  • 每次查詢,只能指定一個$text查詢
  • 不能出現(xiàn)在$nor查詢中
  • 查詢中如果包含了$text, hint(強制指定索引)不再起作用
  • MongoDB全文索引還不支持中文

地理位置索引

2D地理位置索引的取值范圍以及表示方法 經(jīng)緯度[經(jīng)度,緯度]
經(jīng)緯度取值范圍:經(jīng)度[-180,180] 緯度[-90,90]


1. 2D索引
創(chuàng)建
db.collection.ensureIndex({w:"2d"})
插入
db.collection.insert({w:[180,90]})
查詢
(1) $near 查詢距離某個點最近的點 ,默認返回最近的100個點
db.collection.find({w:{$near:[x,y]}})
(2) $geoWithin查詢某個形狀內(nèi)的點
#查詢矩形中的點
db.collection.find({w:{$geoWithin:{$box:[[0,0],[3,3]]}}})
#查詢圓中的點
db.collection.find({w:{$geoWithin:{$center:[[0,0],5]}}})
#查詢多邊形中的點
db.collection.find({w:{$geoWithin:{$polygon:[[0,0],[0,1],[2,5],[6,1]]}}})
(3)geoNear查詢
#2d索引不支持minDistance
#num:返回數(shù)量
db.runCommand({geoNear:"collection名稱",near:[x, y],minDistance:10,maxDistance:10,num:1...})

goNear查詢


2. 2Dsphere索引
創(chuàng)建
db.collection.ensureIndex({w:"2dsphere"})
插入
#位置格式
{type:"Point/LineString/Polygon",coordinates:[x,y]}
db.sphere.insert({name:"A",sp:{type:"Point",coordinates:[105.754484701156,41.689607057699]}})
db.sphere.insert({name:"B",sp:{type:"Point",coordinates:[105.304045248031,41.783456183240]}})
db.sphere.insert({name:"C",sp:{type:"Point",coordinates:[105.084318685531,41.389027478812]}})
db.sphere.insert({name:"D",sp:{type:"Point",coordinates:[105.831388998031,41.285916385493]}})
db.sphere.insert({name:"E",sp:{type:"Point",coordinates:[106.128706502914,42.086868474465]}})
db.sphere.insert({name:"F",sp:{type:"Point",coordinates:[105.431074666976,42.009365053841]}})
db.sphere.insert({name:"G",sp:{type:"Point",coordinates:[104.705977010726,41.921549795110]}})
查詢
#2dsphere索引支持minDistance
#num:返回數(shù)量
db.runCommand({
geoNear:"collection名稱",
near:{type:"Point/LineString/Polygon",coordinates:[x,y]},
minDistance:10,
maxDistance:10,
num:1,
...})

>>>2Dsphere索引實踐>>>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內(nèi)容

  • 1、_id索引: 自動創(chuàng)建 2、單鍵索引: 【值為一個單個的值,例如字符串、數(shù)字或者日期】db.nums.in...
    Uzero閱讀 786評論 2 0
  • 索引能夠提高數(shù)據(jù)庫的查詢效率,沒有索引的話,查詢會進行全表掃描(scan every document in...
    zhglance閱讀 2,047評論 0 6
  • Mongodb索引及查詢優(yōu)化分析 創(chuàng)建索引 參數(shù)說明:keys: {FieldNameOne:ascending,...
    liudongdong閱讀 4,322評論 1 8
  • 前言 在MongoDB中,索引通常能夠極大的提高查詢的效率。如果沒有索引,MongoDB在讀取數(shù)據(jù)時必須掃描集合中...
    honehou閱讀 1,384評論 0 1
  • 索引的作用是用來加速查詢,數(shù)據(jù)庫索引與書籍索引類似,創(chuàng)建數(shù)據(jù)庫索引好像確定何如組織書的索引一樣。 explain ...
    JunChow520閱讀 1,906評論 0 0