【问题标题】:IN vs OR in OQL pivotal gemfireOQL 关键 gemfire 中的 IN 与 OR
【发布时间】:2016-07-08 07:42:18
【问题描述】:

在处理跨越集群中不同节点上的多个表(就 gemfire 而言是区域)的内容时,哪个运算符提供更快的结果。

假设现在我的搜索 OQL 查询如下所示:

select * from /content_region where content_type = 'xyz' AND (shared_with.contains('john') OR (shared_with.contains('michael') OR (shared_with.contains('peter')))

考虑 'shared_with' 是列表。

参考资料:

IN vs OR in the SQL WHERE Clause

SQL performance tuning for Oracle Many OR vs IN () [duplicate]

【问题讨论】:

    标签: gemfire spring-data-gemfire oql


    【解决方案1】:

    索引字段上的“IN”作为直接答案将比“OR”响应更快,但也有例外。

    您的示例中的一些 cmets:

    select * from /content_region where content_type = 'xyz' AND (shared_with.contains('john') OR (shared_with.contains('michael') OR (shared_with.contains('peter')))
    

    您希望将 "content_type = 'xyz' AND " 放在您的“OR”语句前面,因为 GemFire 将首先执行该语句并使用较小的结果集,在内存中应用有限结果集的“包含”操作。

    在您提供的示例中,“IN”子句不能与 contains 一起应用。

    在我离开这个答案之前,我确实经常将 IN 与另一个结果集中的键一起使用。如果该属性被索引,它是非常快的。

    【讨论】:

    • 谢谢@Wes。是的,我们正在使用基于 gemfire 映射的索引,并且截至目前,OR 在直接相等搜索方面的性能优于 IN。而且,对于“包含”功能,“IN”子句甚至不支持正则表达式搜索,例如'%john%' 来获取与 'john frey'、'john geller' 等共享的内容。因此,我们使用带有 'contains' 方法的 OR 子句。
    • 对不起,我的错。 contains() 在此处列出,因此它也不支持使用 '%' 进行部分搜索。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 2011-03-05
    • 2010-10-21
    相关资源
    最近更新 更多