ITPub博客

首页 > 数据库 > 数据库开发技术 > Mongodb正则$regex查询慢的问题

Mongodb正则$regex查询慢的问题

原创 数据库开发技术 作者:后端Q 时间:2021-06-14 00:00:00 0 删除 编辑

$regex查询慢的原因,大部分是没有命中索引,如果需要命中索引有两点需要注意

1) 不能区分大小写 ,不要指定"$options":"i"

"$options":"i"

2)必须指定开头情况,才能使用索引

{"text":{"$regex":"^str"}}
{"text":{"$regex":"^(?!str)"}}

对于区分大小写的正则表达式查询,如果字段存在索引,那么MongoDB将正则表达式与索引中的值进行匹配,这可能比集合扫描快。如果正则表达式是“prefix expression”,这意味着所有潜在的匹配都以同一字符串开头,则可以进行进一步的优化。这允许MongoDB从该前缀构造一个“范围”,并且只与索引中属于该范围的值匹配。

如果正则表达式以插入符号(^)或左锚点(\A)开头,后跟一系列简单符号,则它是“前缀表达式”。例如,正则表达式/^abc.*/将通过仅与以abc开头的索引中的值匹配来优化。

此外,/^a/、/^a./和/^a./速度较慢。/^a/可以在匹配前缀后停止扫描。

不区分大小写的正则表达式查询通常不能有效地使用索引。$regex实现不支持排序规则,因此无法使用不区分大小写的索引。


原文作者:后端Q;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2023-01-22

  • 博文量
    1540
  • 访问量
    725947