2016-07-08 7 views
0

Beim Umgang mit Inhalten über mehrere Tabellen (Regionen in Bezug auf Gemfire) auf verschiedenen Knoten in einem Cluster, welcher Operator bietet schnellere Ergebnisse.IN vs OR in OQL Pivotal Gemfire

Lasst uns sagen, denn jetzt wie folgt meiner Suche OQL-Abfrage aussieht:

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

Betrachten 'shared_with' ist Liste.

Referenzen:

IN vs OR in the SQL WHERE Clause

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

Antwort

1

"IN" auf einem indizierten Feld extrem reaktions sein werden als "OR" als direkte Antwort, aber es gibt Ausnahmen.

Einige Kommentare zu Ihrem Beispiel:

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

Sie möchten, dass "content_type = 'xyz' AND " vor Ihrem „OR“ -Aussagen haben, weil GemFire ​​zunächst diese Anweisung ausführen und mit der Ergebnismenge kleiner, gelten die „enthält“ In-Memory-Betrieb mit begrenztem Ergebnissatz.

In dem von Ihnen angegebenen Beispiel kann eine Klausel "IN" nicht mit contains angewendet werden.

Bevor ich diese Antwort verlasse, benutze ich do IN oft mit Schlüsseln aus einem anderen Ergebnissatz. Wenn das Attribut indiziert ist, ist es sehr schnell.

+0

Dank @Wes. Ja, wir verwenden Gemfire Map-basierte Indizes und ab sofort funktioniert OR besser als IN für direkte Gleichheitsrecherchen. Und für das "enthält" -Feature unterstützt die "IN" -Klausel nicht einmal die Regex-Suche, z. '% john%', um Inhalte zu holen, die mit 'john frey', 'john geller' usw. geteilt wurden. Also gingen wir mit der OR-Klausel mit 'contains' Methode. – manoj

+0

Sorry, mein Schlechter. 'contains()' ist hier in der Liste, so dass auch Teilsuchen mit '%' nicht unterstützt werden. – manoj

Verwandte Themen