MongoDBでインデックスの代わりにBasicCursorを使用させる方法
MongoDBは通常、クエリ実行時に最適なインデックスを自動的に選択しますが、動作検証やパフォーマンス計測などの場面では、意図的にインデックスを使用したくないケースもあります。そのような場合はhint()メソッドに{$natural: 1}を指定することで、MongoDBにBasicCursor(コレクションスキャン)を使用させることができます。
ここでは、まずドキュメントを含むコレクションを作成してみましょう。
コレクションとインデックスの作成
まず、StudentFirstNameフィールドにインデックスを作成し、複数のドキュメントを挿入します。
> db.demo31.createIndex({"StudentFirstName":1});
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
> db.demo31.insertOne({"StudentFirstName":"John"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e174f8fcfb11e5c34d898c1")
}
> db.demo31.insertOne({"StudentFirstName":"Jace"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e174f97cfb11e5c34d898c2")
}
> db.demo31.insertOne({"StudentFirstName":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e174f9ccfb11e5c34d898c3")
}
> db.demo31.insertOne({"StudentFirstName":"James"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e174fa0cfb11e5c34d898c4")
}
登録済みドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示します。
> db.demo31.find();
上記のクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e174f8fcfb11e5c34d898c1"), "StudentFirstName" : "John" }
{ "_id" : ObjectId("5e174f97cfb11e5c34d898c2"), "StudentFirstName" : "Jace" }
{ "_id" : ObjectId("5e174f9ccfb11e5c34d898c3"), "StudentFirstName" : "Chris" }
{ "_id" : ObjectId("5e174fa0cfb11e5c34d898c4"), "StudentFirstName" : "James" }
BasicCursorの使用を強制するクエリ
以下のようにhint({$natural: 1})を指定すると、インデックスを無視して自然順序(ディスク上の格納順)でコレクションをスキャンするようになります。
> db.demo31.find({"StudentFirstName": {$regex: '^Ja'}}).hint({ $natural: 1});
このクエリを実行すると、次の出力が得られます。
{ "_id" : ObjectId("5e174f97cfb11e5c34d898c2"), "StudentFirstName" : "Jace" }
{ "_id" : ObjectId("5e174fa0cfb11e5c34d898c4"), "StudentFirstName" : "James" }
{$natural: 1}は自然順序での走査を意味します。この指定により、MongoDBはStudentFirstNameフィールドのインデックスを使用せず、正規表現条件に一致するドキュメントをフルスキャンで検索します。なお、実行計画を確認したい場合はexplain()を組み合わせると、実際にCOLLSCAN(コレクションスキャン)が使用されていることを確認できます。
-
ExcelのINDEX関数とMATCH関数の使い方を徹底解説!基本構文から組み合わせ技まで
ポイント INDEX関数は単体でも使えますが、MATCH関数をネスト(入れ子)することで高度な検索が可能になります。 この組み合わせはVLOOKUPよりも柔軟性が高く、処理が速くなることもあります。 この記事では、Excel 2019やMicrosoft 365を含むすべてのバージョンのExcelで、INDEX関数とMATCH関数を組み合わせて使う方法を解説します。 INDEX関数とMATCH関数とは? INDEXとMATCHは、Excelの検索系関数です。それぞれ単独で使用できる独立した関数ですが、組み合わせることでより高度な数式を作成できます。 INDEX関数は、指定した範囲の中から特
-
Macでアプリを強制終了する5つの方法【応答しないアプリの閉じ方】
Macは信頼性の高さで知られていますが、だからといって応答しないアプリに遭遇しないわけではありません。実際、これはMacユーザーから最もよく報告されるトラブルの一つであり、特に複数のアプリケーションを同時に起動しているときに発生しやすい傾向があります。このような状況になると、通常の入力操作がまったく受け付けなくなります。アプリを閉じようとしてもウィンドウが完全に固まってしまったり、macOS High Sierraなどでは、マウスポインタ自体が終了ボタンまで届かなくなるケースも報告されています。では、こんな場面に直面したとき、どうすればよいのでしょうか?Macを再起動する以外にも、強制終了(F