2016-07-08 11 views
0

클러스터의 다른 노드에서 여러 테이블 (젬 파이어의 영역)에 걸쳐있는 콘텐츠를 처리 할 때 어떤 연산자가 더 빠른 결과를 제공합니까? IN 대 OQL 중추적 인 젬 파일

이의 지금 내 검색 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]

답변

1

"IN이"보다는 매우 더 반응 할 것 "OR"직접적인 대답은하지만 예외가 있습니다. 귀하의 예에

일부 코멘트 :

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

당신은 GemFire가 먼저 문을 실행하고 작은 결과 집합으로, (가) "포함"적용 때문에 "또는"문 앞에 그 "content_type = 'xyz' AND "을 갖고 싶어 제한된 결과 세트로 메모리 내에서 작업하십시오.

입력 한 예에서 "IN"절은 contains와 함께 적용 할 수 없습니다.

나는이 대답을 떠나기 전에 을 수행하고은 다른 결과 집합의 키를 자주 사용합니다. 특성이 인덱싱되면 매우 빠릅니다.

+0

감사합니다. @Wes. 예, 우리는 gemfire map을 기반으로하는 인덱스를 사용하고 있습니다. OR은 직접 평등 검색을 위해 IN보다 성능이 뛰어납니다. 또한 '포함'기능의 경우 'IN'절은 정규식 검색을 지원하지 않습니다. 'john frey', 'john geller'등과 공유 된 콘텐츠를 가져 오는 '% john %'입니다. 따라서 'contains'메소드로 OR 절을 사용했습니다. – manoj

+0

죄송합니다. 'contains()'가 여기에 있으므로 '%'를 사용한 부분 검색도 지원하지 않습니다. – manoj