2016-07-13 11 views
0

Ich bin verwirrt durch die rethinkdb Dokumente.Kann ich mehrere sekundäre Indizes für eine Tabelle in RethinkDB erstellen und sie für verschiedene Abfragen verwenden?

Ich habe eine Tabelle, die potenziell Millionen von Einträgen enthalten wird. Hier ist, wie alle meine Fragen aussehen (Pseudo-Code):

- all where column1 == '' 
     - filter where column2 == '' AND column3 == '' orderBy dateColumn7.field1 

- all where column1 == '' 
     - filter where column2 == '' AND column4 == '' orderBy dateColumn7.field2 

- all where column1 == '' 
     - filter where column5 == '' AND column6 == '' orderBy dateColumn7.field3 

So sind meine Fragen alle von column1 suchen, und dann haben sie einige spezielle Filter, je nachdem, welche Abfrage ich rufe, und ein orderBy, überspringen und Limit für Paging usw.

Problem: Ich habe in rethinkdb Dokumente gelesen, dass. Filter() nicht mit sekundären Indizes funktioniert, plus OrderBy ist auf 100k Einträge beschränkt, so muss ich jetzt aufgeben mit .filter(), und tun alle meine Fragen mit getAll.

Frage: Soll ich nun für jede Abfrage einen Index erstellen, ist das die empfohlene Vorgehensweise? Zum Beispiel:

indexCreate('ixQuery1', [column1, column2, column3, dateColumn7(field1)] 
indexCreate('ixQuery2', [column1, column2, column4, dateColumn7(field2)] 
indexCreate('ixQuery3', [column1, column5, column6, dateColumn7(field3)] 

... und jedes von ihnen mit den entsprechenden Abfragen verwenden? Ist das die beste Vorgehensweise, wenn ich nach großen Tischen suchen möchte? Oder kann ich irgendwie weiter filter und orderBy() verwenden und trotzdem keine Datensätze verlieren, wenn ich erwarte, dass meine Suchanfrage alle durchsucht?

Lassen Sie mich wissen, wenn meine Frage unklar ist. Vielen Dank

Antwort

0

Ja, in diesem Fall benötigen Sie einen separaten Index für jeden einzelnen.