インデックスのクエリをスピードアップするために使用され、物事の両面性質がありますが、同時にそれぞれの挿入、更新、および追加のオーバーヘッド削除になります。時々、インデックスが遅いクエリの問題を解決しない、一般的に、より多くの結果の半分以上を集めた、いくつかのより効率的な全表スキャンクエリのインデックスを返します。挿入になりますあまりにも多くのインデックスを作成することは非常に遅いですが、多くのスペースを占有します。ヒントで分析し、ツールを説明することができます。方向性指数、降順または昇順。指標64のデフォルトの最大数の各セット。1.ビューインデックス
> db.ttlsa_events.getIndexes();
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "ttlsa_login.ttlsa_events",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"stmp" : -1
},
"ns" : "ttlsa_login.ttlsa_events",
"name" : "stmp_-1"
},
{
"v" : 1,
"key" : {
"uid" : 1,
"stmp" : -1
},
"ns" : "ttlsa_login.ttlsa_events",
"name" : "uid_1_stmp_-1"
}
]
この例では、テーブルを作成するときに_idインデックスが自動的に作成された3つのインデックスは、削除することはできませんがあります。uid_1_stmp_-1は、組み合わせ指数です。上昇のための1、-1手段降順。2.作成索引索引パラメータは、次のとおりです。
option values default
backgroud true/false false
dropDups true/false false
unique true/false false
sparse true/false false
> db.ttlsa_posts.ensureIndex({pid:1});
インデックスを作成するために大量のデータがある場合には非常に時間がかかりますが、背景に割り当てることができ、単に「その背景:真」を指定することができます。として
> db.ttlsa_posts.ensureIndex({pid:1},{backgroud:true});
3.組み込みインデックスは、共通のキーを持つインデックスは差は認められなかった債券インデックスを作成するために、文書に埋め込まれている作成されます。
> db.ttlsa_posts.ensureIndex({"post.date":1})
4.原稿種類インデックス
> db.ttlsa_comments.insert({cid:222, properties:{user:'ttlsa', email:'[email protected]'}})
> db.ttlsa_comments.ensureIndex({properties:1})
5.組み合わせ指数
> db.ttlsa_comments.ensureIndex({"properties.user":1,"properties.email":1})
次のクエリは、このインデックスを使用します
> db.ttlsa_comments.find({"properties.user":'ttlsa',"properties.email":'[email protected]'})
> db.ttlsa_comments.find({"properties.user":'ttlsa'})
> db.ttlsa_comments.find().sort({"properties.user":1})
インデックス値、クエリ、サブクエリ前方一致指数の複数を組み合わせることで、あなたはコンビネーションインデックスを使用することができます。「:真のユニークな」することができ6.一意のインデックスは、専用の名前付けensureIndexで指定する必要があります。
> db.ttlsa_posts.ensureIndex({pid:1},{unique:true})
既存のコレクションにインデックスを作成する場合、一部のデータが繰り返されている可能性があり、その後、一意のインデックスが失敗します作成します。DropDupsは、最初の文書を保持するために使用することができ、その後、重複ドキュメントが削除され、この方法は慎重な操作です。
> db.ttlsa_posts.ensureIndex({pid:1},{unique:true, dropDups:true})
7.フォースインデックスヒントコマンドは、インデックスを使用するように強制することができます
> db.ttlsa_posts.find({pid:{$lt:333}}).hint({pid:1,date:1})
8.インデックスはすべてのインデックスのコレクションを削除する削除します。
> db.collection.dropIndexes()
インデックスのセットを削除します。
> db.collection.dropIndex({x:1})
9.インデックスを再構築
> db.collection.reIndex()
> db.runCommand({reIndex:'collection'})
コレクションをロックしますインデックスを再構築します。修理順序でデータベースを修復する場合は、インデックスを再構築します。10. MongoDBのフルテキストインデックスのフルテキストインデックスは、後でこれを言うために、バージョン2.4で導入されました。11.説明コマンドがインデックスの場合、時間がかかり、およびドキュメントの統計情報をスキャンするので、数を使用してクエリを返す使用する計画の実施を説明します。
> db.ttlsa_events.find({uid:178620830}).explain()
{
"cursor" : "BtreeCursor uid_1_stmp_-1",
"isMultiKey" : false,
"n" : 2,
"nscannedObjects" : 2,
"nscanned" : 2,
"nscannedObjectsAllPlans" : 2,
"nscannedAllPlans" : 2,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 4,
"indexBounds" : {
"uid" : [
[
178620830,
178620830
]
],
"stmp" : [
[
{
"$maxElement" : 1
},
{
"$minElement" : 1
}
]
]
},
"server" : "TTLSA-191155:27017"
}
フィールドの説明:カーソル:率nの組み合わせを使用するかどうか:カーソル型isMultiKeyを返し文書nscannedObjectsの数を返す:スキャンする文書のnscanned数:検査文書またはインデックスエントリ番号scanAndOrder:メモリにindexOnlyを注文するかどうか:nYields:のクエリミリ:倍nChunkSkipsを待っている読み取りロックを実行するために、書き込み動作を待つ時間がかかり(MS)indexBounds:使用されるインデックスサーバー:プロファイリングレベルを表示する機能をプロファイリングするサーバーのホスト名12.ターン:
> db.getProfilingLevel()
0
プロファイリングレベルを設定します:
> db.setProfilingLevel( level , slowms )
> db.setProfilingLevel(2,10)
{ "was" : 0, "slowms" : 100, "ok" : 1 }
有意水準プロファイルは0,1,2を取ることができ、以下のように表す:0 - デフォルトオープンクラス1 - 遅い記録コマンド(デフォルト> 100ミリ秒)2 - 13のMongoDBプロファイルレコードをプロファイリングするすべてのコマンドのクエリのログが直接記録システムDBではありません記録位置system.profileインチ
> db.system.profile.find().sort({$natural:-1}).limit(1)
{ "ts" : ISODate("2013-07-18T09:56:59.546Z"), "op" : "query", "ns" : "ttlsa_event.ttlsa_events", "query" : { "$query" : { "uid" : 161484152, "stmp" : { "$gt" : 0 } }, "$orderby" : { "stmp" : -1 } }, "ntoreturn" : 0, "ntoskip" : 0, "nscanned" : 35, "keyUpdates" : 0, "numYield" : 0, "lockStats" : { "timeLockedMicros" : { "r" : NumberLong(354), "w" : NumberLong(0) }, "timeAcquiringMicros" : { "r" : NumberLong(3), "w" : NumberLong(3) } }, "nreturned" : 35, "responseLength" : 7227, "millis" : 0, "client" : "10.1.242.209", "user" : "" }
> db.system.profile.find().pretty().limit(1)
{
"ts" : ISODate("2013-07-18T09:53:40.103Z"),
"op" : "query",
"ns" : "ttlsa_event.ttlsa_event_friends",
"query" : {
"_id" : 195794232
},
"ntoreturn" : 1,
"idhack" : true,
"keyUpdates" : 0,
"numYield" : 0,
"lockStats" : {
"timeLockedMicros" : {
"r" : NumberLong(45),
"w" : NumberLong(0)
},
"timeAcquiringMicros" : {
"r" : NumberLong(3),
"w" : NumberLong(5)
}
},
"responseLength" : 20,
"millis" : 0,
"client" : "10.1.22.199",
"user" : ""
}
フィールド説明:TS:このコマンドは、OPに実行されます。操作タイプのクエリ:詳細responseLengthこのコマンドは、結果セットのサイズntoreturnを返す:実際のクエリは、ミリ秒の結果セットを返します。このコマンドは取り、ミリ秒単位で14.キャップされた通常のプロファイリング・コレクションのサイズよりも高い書込み効率を改変しました。キャップコレクションコレクション型が以下の特性を有している、非常に効率的である:固定サイズと、キャップのコレクションを事前に作成する必要があり、サイズを設定:> Db.createCollection(「コレクション」、{キャップされた:真、サイズ:100000})B。頂いたコレクションを挿入することができ、更新操作は、操作を削除することはできません。ドロップ(と全体のコレクションを削除する唯一の)方法。C。ベースのデフォルトのソート順を挿入します。ソートされていない場合は、クエリは常に、インサートの順に返されます。D。FIFO。定義されたサイズのコレクションより、FIFOアルゴリズムが使用されている場合は、新しいレコードが最初のインサートのレコードを置き換えます
> db.setProfilingLevel(0)
{ "was" : 2, "slowms" : 10, "ok" : 1 }
>
> db.getProfilingLevel()
0
> db.system.profile.drop()
true
> db.createCollection("system.profile",{capped:true, size: 1000000})
{ "ok" : 1 }
> db.system.profile.stats()
{
"ns" : "ttlsa_event.system.profile",
"count" : 0,
"size" : 0,
"storageSize" : 1003520,
"numExtents" : 1,
"nindexes" : 0,
"lastExtentSize" : 1003520,
"paddingFactor" : 1,
"systemFlags" : 0,
"userFlags" : 0,
"totalIndexSize" : 0,
"indexSizes" : {
},
"capped" : true,
"max" : 2147483647,
"ok" : 1
}
ソースを示してください
ます。http://www.ttlsa.com/html/1661.htmlを
ます。https://my.oschina.net/766/blog/210857で再現