Wir haben die folgende Tabelle (in SQLite unter Android), die eine Baumstruktur (Nested Set-Modell) von Wörtern und deren Häufigkeit enthält:
lexikon
-------
_id integer PRIMARY KEY
word text
frequency integer
lset integer UNIQUE KEY
rset integer UNIQUE KEY
Und die Frage:
SELECT word
FROM lexikon
WHERE lset BETWEEN @Low AND @High
ORDER BY frequency DESC
LIMIT @N
Ich nehme an, ein Abdeckungsindex für (lset, frequency, word)
wäre nützlich, aber ich bin der Meinung, dass er möglicherweise nicht gut funktioniert, wenn zu viele lset
Werte im (@High, @Low)
Bereich vorhanden sind.
Ein einfacher Index für (frequency DESC)
kann manchmal auch ausreichend sein, wenn eine Suche mit diesem Index frühzeitig die @N
Zeilen ergibt, die der Bereichsbedingung entsprechen.
Es scheint jedoch, dass die Leistung stark von den Parameterwerten abhängt.
Gibt es eine Möglichkeit, eine schnelle Leistung zu erzielen, unabhängig davon, ob der Bereich (@Low, @High)
breit oder eng ist und ob die Wörter mit der höchsten Frequenz glücklicherweise im (engen) ausgewählten Bereich liegen?
frequency
Spalte geben?