如何加快使用多个字符串过滤器的查询?
我在MongoDB 3.4中有一个集合来存储来自某个应用程序的所有用户的联系人。 每个联系人都有大量的字符串字段(100+)。 我使用MongoDB,但问题适用于任何其他引擎(MySQL,弹性搜索等)
几乎所有检索联系人的查询都具有相同的四个基本条件,例如,user_id,base_field1,base_field2,base_field3,因此我创建了一个包含这些字段的复合索引以改进查询。 基本查询如下所示:
db.contacts.find({
user_id: 1434,
base_field1: {$in: [0, 10]},
base_field2: true,
base_field3: "some value"
}).limit(10)
基本查询的执行时间很好(小于2秒),但请记住有25K个联系符合基本条件。
但是,该应用程序允许用户通过任何其他字段筛选联系人,甚至可以添加任意数量的筛选器。 所有过滤器都使用包含运算符,因此查询如下所示:
db.contacts.find({
user_id: 1434,
base_field1: {$in: [0, 10]},
base_field2: true,
base_field3: "some value",
field4: {$regex: "foobar", $options: "i"},
field5: {$regex: "foobar", $options: "i"},
field6: {$regex: "foobar", $options: "i"},
.
.
.
}).limit(10)
因此,我们的要求执行时间不好(9-10秒)。 另外,正如您所预料的那样,增加过滤器的数量也会增加执行时间,因此:
有没有什么方法可以加快从设计和查询的角度来查询?
有没有其他数据库引擎比MongoDB更好地改善这种查询?
请在回复前考虑以下意见和限制:
编辑:我改变了或条件(field4或field5 ...)的条件是真实的情况。
链接地址: http://www.djcxy.com/p/57917.html上一篇: How to speed up a query which use several string filters?