MongoDBインデックス管理-インデックスの作成、表示、削除

4392 ワード

http://itbilu.com/database/mongo/E1tWQz4_e.html
インデックスは、クエリーの効率を向上させる最も効果的な手段です.インデックスは特殊なデータ構造で、インデックスは、特定のフィールドまたはフィールド値のセットなど、データの一部を遍歴しやすい形で格納します.インデックスは一定のルールで格納値をソートし、インデックスの格納場所はメモリにあり、インデックスからデータを取得するのが非常に速いです.インデックスがない場合、MongoDBは、特にデータ量が大きい場合に、セット内の各ドキュメントをスキャンする必要があります.
  • インデックスの作成/再構築
  • インデックスを表示
  • 削除インデックス
  • 1.インデックスの作成/再構築
    MongoDBの新しいインデックス作成にはensureIndex()メソッドが使用され、既存のインデックスに対してreIndex()を使用して再構築できます.
    1.1インデックス作成ensureIndex()MongoDBインデックス作成にはensureIndex()メソッドが使用されます.
    構文構造
    db.COLLECTION_NAME.ensureIndex(keys[,options])
  • keys、インデックスを作成するパラメータのリスト.例えば、{KEY:1}keyはフィールド名、1は昇順ソートを表し、-1を使用して降順することもできます.
  • options、オプションのパラメータは、インデックスの設定を確立することを示す.オプションの値は次のとおりです.
  • background、Booleanは、バックグラウンドでインデックスを作成し、インデックスを作成するときに他のデータベースのアクティビティをブロックしないようにします.デフォルトfalse.
  • unique、Boolean、一意のインデックスを作成します.デフォルトfalse.
  • name、String、インデックスの名前を指定します.指定されていない場合、MongoDBはインデックスフィールドの名前とソート順を直列に生成します.
  • dropDups,Boolean,一意のインデックスを作成すると,後続の同じインデックスの重複削除が発生した場合,最初のインデックスのみが保持される.
  • sparse,Booleanは、ドキュメントに存在しないフィールドデータにインデックスを有効にしません.デフォルトはfalseです.
  • v、index version、インデックスのバージョン番号.
  • weights、document、インデックスウェイト値、数値は1から999999の間であり、他のインデックスフィールドに対するインデックスのスコアウェイトを表す.


  • たとえば、セットsitesのインデックスを作成します.
    > db.sites.ensureIndex({name: 1, domain: -1})
    {
      "createdCollectionAutomatically" : false,
      "numIndexesBefore" : 1,
      "numIndexesAfter" : 2,
      "ok" : 1
    }

    注:1.8リリースより前にインデックスが作成されましたcreateIndex()1.8リリースを使用して削除されました
    1.2インデックスの再構築reIndex()
    db.COLLECTION_NAME.reIndex()

    たとえば、セットsitesのすべてのインデックスを再構築します.
    > db.sites.reIndex()
    {
      "nIndexesWas" : 2,
      "nIndexes" : 2,
      "indexes" : [
        {
    	  "key" : {
    		"_id" : 1
    	  },
    	  "name" : "_id_",
    		"ns" : "newDB.sites"
    	},
    	{
    	  "key" : {
    		"name" : 1,
    		"domain" : -1
    	  },
    	  "name" : "name_1_domain_-1",
    	  "ns" : "newDB.sites"
    	}
      ],
      "ok" : 1
    }

    2.索引の表示
    MongoDBは、インデックス情報を表示する方法を提供します.getIndexes()の方法は、セットのすべてのインデックスを表示し、totalIndexSize()の合計サイズを表示し、db.system.indexes.find()のデータベース内のすべてのインデックス情報を表示します.
    2.1コレクション内のインデックスの表示getIndexes()
    db.COLLECTION_NAME.getIndexes()

    たとえば、セットsitesのインデックスを表示します.
    >db.sites.getIndexes()
    [
      {
    	"v" : 1,
    	"key" : {
    	  "_id" : 1
    	},
    	"name" : "_id_",
    	"ns" : "newDB.sites"
      },
      {
    	"v" : 1,
    	"key" : {
    	  "name" : 1,
    	  "domain" : -1
    	},
    	"name" : "name_1_domain_-1",
    	"ns" : "newDB.sites"
      }
    ]

    2.2コレクション内のインデックスサイズの表示totalIndexSize()
    db.COLLECTION_NAME.totalIndexSize()

    たとえば、セットsitesのインデックス・サイズを表示します.
    > db.sites.totalIndexSize()
    16352

    2.3データベース内のすべてのインデックスを表示するdb.system.indexes.find()
    db.system.indexes.find()

    たとえば、現在のデータベースのすべてのインデックス:
    > db.system.indexes.find()

    3.索引の削除
    不要なインデックスは削除できます.インデックスを削除すると、コレクション内のインデックスを削除できます.すべてのインデックスを削除できます.
    3.1指定されたインデックスを削除するdropIndex()
    db.COLLECTION_NAME.dropIndex("INDEX-NAME")

    たとえば、セットsitesの「name_1_domain_-1」という名前のインデックスを削除します.
    > db.sites.dropIndex("name_1_domain_-1")
    { "nIndexesWas" : 2, "ok" : 1 }

    3.3すべてのインデックスを削除するdropIndexes()
    db.COLLECTION_NAME.dropIndexes()

    たとえば、セットsitesのすべてのインデックスを削除します.
    > db.sites.dropIndexes()
    {
      "nIndexesWas" : 1,
      "msg" : "non-_id indexes dropped for collection",
      "ok" : 1
    }