我在一个集合中有150万个文档,其中有索引的"name“字段。像db.things.find({name: /^foo/i})这样的查询大约需要5秒,速度非常慢。具有相同记录的类似MySQL表在不到10 ms内执行SELECT * FROM things WHERE name LIKE 'foo%'。
蒙戈解释道:
db.things.find({name: /^foo/i}).limit(10).explain()
{
"cursor" : "BtreeCursor name_1 multi",
"nscanned" : 325730,
"nscannedObjects" : 10,
"n" : 10,
"millis" : 4758,
"nYields" : 89,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"name" : [
[
"",
{
}
],
[
/^foo/i,
/^foo/i
]
]
}
}那么,regexp查询在mongo中是慢的还是我做错了呢?
发布于 2012-04-10 03:38:10
不区分大小写的regex搜索将是缓慢的,因为它不能有效地利用索引。如果只使用该字段进行搜索,则应考虑以所有小写形式存储文本,并使用区分大小写的正则表达式进行搜索。
https://stackoverflow.com/questions/10079444
复制相似问题