乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      MongoDB索引(7)

       新進(jìn)小設(shè)計(jì) 2022-03-10

      索引是對(duì)數(shù)據(jù)庫(kù)表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu),可以讓我們查詢數(shù)據(jù)庫(kù)變得 更快。MongoDB 的索引幾乎與傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)一模一樣,這其中也包括一些基本的查詢優(yōu)化技巧。

      增加檢索的效率. mongodb提供了索引的支持.(越來(lái)越傾向于關(guān)系型數(shù)據(jù)庫(kù))

      通常建立索引的, 基本要求, 就是文檔的結(jié)構(gòu)要盡可能一致.

      普通單列索引

      語(yǔ)法:

      db.集合名.ensureIndex({鍵名:1}) # 1是升序 -1是降序
      

      測(cè)試代碼:

      for(var i = 0; i < 200000; i++) {
          db.golang.insert({name:"bashlog"+i, age:i})
      }
      

      第一:先檢驗(yàn)一下查詢性能

      var start = new Date()
      db.golang.find({name:"bashlog187654"})
      var end = new Date()
      end - start
      

      第二:為name創(chuàng)建索引

      db.golang.ensureIndex({name:1})
      

      第三:再執(zhí)行第一部分的查詢代碼可以看出有數(shù)量級(jí)的性能提升

      多列索引(復(fù)合索引)

      語(yǔ)法:

      db.集合名.ensureIndex({field1:1/-1, field2:1/-1})
      

      對(duì)name和age建立復(fù)合索引

      可以使用getIndexes()查看索引的創(chuàng)建情況

      該索引被創(chuàng)建后,基于 username 和 age 的查詢將會(huì)用到該索引,或者是基于 username 的查詢也會(huì)用到該索引,但是只是基于 age 的查詢將不會(huì)用到該復(fù)合索引。因此可以說(shuō), 如果想用到復(fù)合索引,必須在查詢條件中包含復(fù)合索引中的前 N 個(gè)索引列。

      子文檔索引

      語(yǔ)法:

      db.集合名.ensureIndex({field.subfield:1/-1})
      

      示例:

      有如下結(jié)構(gòu)的文檔

      {name:"諾基亞手機(jī)1", price:12.34, desc:{weight:100, area:"lundon"}}
      {name:"諾基亞手機(jī)2", price:43.21, desc:{weight:200, area:"newYork"}}
      

      要查詢weight等于100的文檔

      db.goods.find({'desc.weight':100})
      

      根據(jù)當(dāng)前示例,我們建立子文檔

      db.集合名.ensureIndex({'desc.weight':1})
      

      唯一索引

      當(dāng)給某個(gè)列添加了唯一索引后,那么這一列的數(shù)據(jù)就必須是唯一的,如果添加重復(fù)數(shù)據(jù)就回到值報(bào)錯(cuò)

      語(yǔ)法:

      db.集合名.ensureIndex({name:-1},{unique:true})
      

      查看索引

      常用命令:

      (1)查看當(dāng)前索引狀態(tài):

      db.集合名.getIndexes()
      

      (2)詳情查看本次查詢使用哪個(gè)索引和查詢數(shù)據(jù)的狀態(tài)信息。

      explain("executionStats")
      

      有索引時(shí),查詢時(shí)間

      刪除索引時(shí)查詢時(shí)間

      刪除索引

      刪除單個(gè)索引

      語(yǔ)法:

      db.集合名.dropIndex({field:1/-1})
      

      刪除所有索引

      語(yǔ)法:

      db.集合名.dropIndexes()
      

      注意:在刪除所有的索引是,逐漸索引會(huì)保留。

      重建索引

      一個(gè)表經(jīng)過(guò)多次修改后,導(dǎo)致表的文件產(chǎn)生空洞,所以文件也是如此??梢酝ㄟ^(guò)索引的重建,減少索引文件鎖片,并提高索引的效率。

      類似MySQL的optimize table 表名

      語(yǔ)法:

      db.集合名.reIndex()
      

      索引使用注意事項(xiàng)

      (1)創(chuàng)建索引的時(shí)候,注意1是正序創(chuàng)建索引 -1是倒序創(chuàng)建索引

      (2)索引的創(chuàng)建在提高查詢性能的同時(shí)會(huì)影響插入性能,對(duì)于經(jīng)常查詢少插入的文檔可以考慮用索引

      (3)復(fù)合索引要注意索引的先后順序。

      (4)每個(gè)鍵全建立索引不一定就能提高性能,索引不是萬(wàn)能的。

      (5)在做排序工作的時(shí)候如果是超大數(shù)據(jù)量也可以考慮加上索引用來(lái)提高排序的性能。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多