Wie ist es möglich, eine effiziente Suche in großen Sqlite-Datenbanken (mehr als 90000 Einträge) zu implementieren?
Ich verwende Python und SQLObject ORM:
import re
...
def search1():
cr = re.compile(ur'foo')
for item in Item.select():
if cr.search(item.name) or cr.search(item.skim):
print item.name
Diese Funktion läuft in mehr als 30 Sekunden ab. Wie kann ich sie schneller ausführen?
UPD : Der Test:
for item in Item.select():
pass
... benötigt fast die gleiche Zeit wie meine Ausgangsfunktion (0:00:33.093141 bis 0:00:33.322414). Die Regexps fressen also keine Zeit.
Eine Sqlite3-Shell-Abfrage:
select '' from item where name like '%foo%';
läuft in etwa einer Sekunde. Der größte Zeitaufwand entsteht also durch die ineffiziente ORM-Datenabfrage aus der Datenbank. Ich vermute, dass SQLObject hier ganze Zeilen abruft, während Sqlite nur die notwendigen Felder berührt.