我正在尝试从 java 驱动程序对 mongo 集群运行一些基于通配符/正则表达式的查询。Mongo 副本集配置:3 个成员副本 16 CPU(超线程),24G RAM Linux x86_64 集合大小:6M 行,7G 数据
客户端是具有最新 mongo-java 驱动程序的 localhost (mac osx 10.8)
使用带有 readpref = primaryPrefered 的 java 驱动程序进行查询
{ "$and" : [{ "$or" : [ { "country" : "united states"}]} , { "$or" : [ { "registering_organization" : { "$regex" : "^.*itt.*hartford.*$"}} , { "registering_organization" : { "$regex" : "^.*met.*life.*$"}} , { "registering_organization" : { "$regex" : "^.*cardinal.*health.*$"}}]}]}
我对“国家”和“注册组织”都有定期索引。但是根据 mongo 文档,单个查询只能使用一个索引,我也可以从上述查询的 explain() 中看到这一点。
所以我的问题是在上述查询中实现更好性能的最佳选择是什么。我应该打破'and'操作并在内存交集中做。更进一步,我也将在查询中进行“不”操作。
我认为我的应用程序将来可能会变成报告/分析,但这并不重要,或者我不打算进行相应的设计。