MongoDB を使用して最初のアプリを作成していました。フィールドのインデックスを作成し、$regex パラメータを使用して検索クエリを試行し、シェルで起動しました
> db.foo.find({A:{$regex:'BLABLA!25500[0-9]'}}).explain()
{
"cursor" : "BtreeCursor A_1 multi",
"nscanned" : 500001,
"nscannedObjects" : 10,
"n" : 10,
"millis" : 956,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"A" : [
[
"",
{
}
],
[
/BLABLA!25500[0-9]/,
/BLABLA!25500[0-9]/
]
]
}
}
同じクエリを起動しているが、コレクションにインデックスがない場合、パフォーマンスがはるかに優れているため、非常に奇妙です。
> db.foo.find({A:{$regex:'BLABLA!25500[0-9]'}}).explain()
{
"cursor" : "BasicCursor",
"nscanned" : 500002,
"nscannedObjects" : 500002,
"n" : 10,
"millis" : 531,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
}
}
明らかに、正規表現を使用せずにインデックスを使用してフィールドを検索する方がはるかに高速です(つまり、定数フィールドを使用してドキュメントを検索する)が、そのような動作の理由に本当に興味があります。