2009-07-16 15 views
1

Die AbfrageSQLite Abfrageoptimierung

SELECT * FROM Table WHERE Path LIKE 'geo-Africa-Egypt-%' 

kann optimiert werden:

SELECT * FROM Table WHERE Path >= 'geo-Africa-Egypt-' AND Path < 'geo-Africa-Egypt-zzz' 

Aber wie kann dies geschehen:

select * from foodDb where Food LIKE '%apples%"; 

, wie diese optimiert werden können?

Antwort

0

Es würde mich überraschen, wenn es schneller wäre, aber Sie könnten GLOB anstelle von LIKE versuchen und vergleichen;

SELECT * FROM foodDb WHERE Food GLOB '*apples*'; 
+0

Nicht schneller. Führt immer noch zu einem vollständigen Tabellenscan. Verwenden Sie sqlites EXPLAIN, um den Abfrageplan anzuzeigen, d. H. Das vdbe-Programm, das für eine Abfrage ausgeführt werden soll. – laalto

1

Eine Möglichkeit ist, redundante Daten. Wenn Sie viel nach einer festen Menge von Strings abfragen, die sich in der Mitte einer Spalte befinden, fügen Sie eine weitere Spalte hinzu, die die Information enthält, ob eine bestimmte Zeichenfolge in der anderen Spalte gefunden werden kann. Eine weitere Option für beliebige, aber immer noch mit Token belegbare Zeichenfolgen besteht darin, eine Wörterverzeichnis-Tabelle zu erstellen, in der Sie die Token (z. B. apples) und Fremdschlüsselverweise auf die tatsächliche Tabelle haben, in der das Token auftritt.

Im Allgemeinen ist sqlite von vornherein nicht sehr gut in Volltextsuchen.