MongoDB 的索引

索引 ( _重點)

在任何數(shù)據(jù)庫之中,索引都是一種提升數(shù)據(jù)庫檢索性能的手段,這一點在Mongo數(shù)據(jù)庫之中同樣是存在的,
在Mongo 數(shù)據(jù)庫中 也存在2 種索引的創(chuàng)建: 1是自動創(chuàng)建, 2是手動創(chuàng)建
        創(chuàng)建一個新的簡單集合
        var data = [
          {"name":"tom ","age":20,"sex":"男","score":100,"address":"南京市江寧區(qū)"},
          {"name":"tom1","age":21,"sex":"女","score":90, "address":"南京市江寧區(qū)"},
          {"name":"tom2","age":21,"sex":"女","score":80, "address":"南京市江寧區(qū)"},
          {"name":"tom3","age":20,"sex":"男","score":70, "address":"南京市江寧區(qū)"},
          {"name":"tom4","age":23,"sex":"男","score":100,"address":"南京市江寧區(qū)"}
        ]
        db.infos.insert(data)
此時我們在這個集合上并沒有設(shè)置任何索引,那么下面用過getIndexes() 這個函數(shù)來觀察 infos 這個集合
      查詢默認狀態(tài)下的infos集合的索引內(nèi)容
      db.infos.getIndexes()
      現(xiàn)在你會發(fā)現(xiàn)存在一個 " _id "列的索引內(nèi)容,但是如果想要創(chuàng)建自己的索引, 則可以使用如下的語法
      語法: db.infos.createIndex({ "age" : -1}) (1: 表示索引按照升序  2: 表示降序)
      
     db.infos.getIndexes() ( 查看索引)
     db.infos.createIndex({ "age" : -1}) (創(chuàng)建索引)
     db.infos.entrueIndexes({ "age" : -1}) (創(chuàng)建索引)
     db.infos.dropIndexes() (刪除所有索引)  _id  不能被刪除
此時并沒有設(shè)置索引的名字,所以名字是自動命名的 規(guī)則是:age_-1
針對當(dāng)前的age 字段上的索引做一個分析
    db.infos.find({age:20}).explain()  ( 這個函數(shù)是查看檢索模式的)
    紅框表示檢索模式為 索引掃描  ( 下圖 )
image.png
不使用有索引的字段進行查詢,我們在分析一下 看看 檢索模式是什么
   db.infos.find({"score":{"$gt":60}}).explain()
  下面紅框表示 全表掃描
image.png
在換一種模式查找 2個條件一起查找
 db.infos.find({"$and":[{age:20},{score:{"$gt":60}}]}).explain()

注意: 由于版本的不同 所以信息 也不太一樣 聽說 低版本的如果這樣查詢的話 是用的全表掃描,但是現(xiàn)在 如果這樣查詢 是用的 索引掃描 看下圖

image.png

總結(jié):

  • 如果數(shù)據(jù)量不是很大的話用索引 意義就不太大
  • 創(chuàng)建數(shù)據(jù)的時候最好不要使用數(shù)組的形式 直接key : value 這樣更好理解和操作

唯一索引

唯一索引的主要目的是用在摸一個字段上, 使該字段的內(nèi)容不重復(fù)
    創(chuàng)建一個唯一索引
    db.infos.createIndex({name:1},{'unique':true}) (后面的選項表示name上的字段絕對不允許重復(fù))
    在infos 的集合里面insert 一個name 重復(fù)的數(shù)據(jù) 看看 如何
    結(jié)果如何 自己查看 主要看看錯誤提示信息. 這里我就不貼圖了
    唯一索引能夠保證 知道字段上的數(shù)據(jù)不會重復(fù)

過期索引

在一些程序站點會出現(xiàn)若干秒之后信息唄刪除的情況, 舉例: 手機信息驗證碼,那么在Mongo 里面就可以輕松的實現(xiàn)過期索引,但是這個時間往往不怎么準(zhǔn)確
    注意設(shè)置過期索引 必須要有時間字段
    db.phones.createIndex({time:1},{expireAfterSeconds:10})
    var data = [
        {tel:110,code:110,time:new Date()},
        {tel:111,code:111,time:new Date()},
        {tel:112,code:112,time:new Date()},
        {tel:113,code:113,time:new Date()},
    ]
    db.phones.insert(data);
    然后不斷的查 db.phones,find()  自己計算看看是多長時間  我的大概在40秒

等到10秒以后 也不會消失. 不太準(zhǔn)確,這樣的特性在進行一些臨時保存數(shù)據(jù)的時候很有幫助,最早如果沒有Mongo這種特性.而只是使用簡單的關(guān)系型數(shù)據(jù)庫開發(fā) 那么是非常麻煩的

全文索引

在一些信息管理的平臺上經(jīng)常需要進行信息模糊查詢,最早的時候是利用了某個字段上時間的模糊查詢,但是這個時間返回的信息并不會很準(zhǔn)確,因為只能夠查A字段或者B字段,在Mongo里面實現(xiàn)了簡單的全文檢索

定義一個新的集合

    var datas = [
        {title:'java',centent:'自學(xué)java'},
        {  title:'javascript,java',centent:'自學(xué)javascript,自學(xué)java'},
        {title:'php',centent:'php,php'},
    ]
    db.news.insert(datas)

首先你要 設(shè)置全文檢索

未完 待續(xù);

地理信息索引

地理信息索引分為2類,2D平面索引,寧外就是2DSphere球面索引,在2D索引里面基本上能夠保存的信息都是坐標(biāo),而且坐標(biāo)的就是經(jīng)緯度的坐標(biāo)
    db.shop.insert({loc:[10,10]})  存放的是經(jīng)緯度 
    var shop = [
          {"loc":[12,12]},
          {"loc":[13,15]},
          {"loc":[112,122]},
          {"loc":[222,322]},
    ]
    db.shop.insert(shop)

  然后為shop 這個集合定義2D 索引

未完待續(xù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末堡距,一起剝皮案震驚了整個濱河市嗤堰,隨后出現(xiàn)的幾起案子曹鸠,更是在濱河造成了極大的恐慌算行,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筐喳,死亡現(xiàn)場離奇詭異法绵,居然都是意外死亡转质,警方通過查閱死者的電腦和手機佩抹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門奇唤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人匹摇,你說我怎么就攤上這事〖自幔” “怎么了廊勃?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我坡垫,道長梭灿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任冰悠,我火速辦了婚禮堡妒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘溉卓。我一直安慰自己皮迟,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布桑寨。 她就那樣靜靜地躺著伏尼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尉尾。 梳的紋絲不亂的頭發(fā)上爆阶,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機與錄音沙咏,去河邊找鬼辨图。 笑死,一個胖子當(dāng)著我的面吹牛肢藐,可吹牛的內(nèi)容都是我干的故河。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼窖壕,長吁一口氣:“原來是場噩夢啊……” “哼忧勿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瞻讽,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鸳吸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后速勇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晌砾,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年烦磁,在試婚紗的時候發(fā)現(xiàn)自己被綠了养匈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡都伪,死狀恐怖呕乎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情陨晶,我是刑警寧澤猬仁,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布帝璧,位于F島的核電站,受9級特大地震影響湿刽,放射性物質(zhì)發(fā)生泄漏的烁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一诈闺、第九天 我趴在偏房一處隱蔽的房頂上張望渴庆。 院中可真熱鬧,春花似錦雅镊、人聲如沸襟雷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗤军。三九已至,卻和暖如春晃危,著一層夾襖步出監(jiān)牢的瞬間叙赚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工僚饭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留震叮,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓鳍鸵,卻偏偏與公主長得像苇瓣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子偿乖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

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