2 Stimmen

Suche in großen Sqlite-Datenbanken

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X