MongoDB:哪个会更快?正则表达式搜索字符串或直接搜索数组?

时间:2016-01-05 19:27:33

标签: regex mongodb indexing

我的应用程序当前在文本字段上执行正则表达式搜索,该字段是逗号分隔的Objectids。根据{{​​3}},Mongo在进行正则表达式搜索时使用索引。

我最初的想法是使用数组来存储ObjectIds而不是使用字符串。但阵列搜索会比正则表达式搜索具有更好的性能,因为它们都使用索引吗?

1 个答案:

答案 0 :(得分:2)

使用ObjectIds数组而不是逗号分隔的ObjectId字符串列表是这里的方法。

  1. 数组将占用较少的空间:ObjectId字符串为24个字符,而BSON ObjectId为12个字节。
  2. 数组索引更有效:对于没有以文本开头为根的正则表达式搜索(即不以^开头),必须使用数组搜索整个索引O(n) ,每个元素都有自己的multikey索引条目O(log n)
  3. 索引条目的大小必须为less than 1024 bytes,这会将您限制为文本字段中的大约42个ObjectIds。
  4. 数组元素可自动修改:您可以使用array update operators直接修改单个元素。