2016-03-29 24 views
0

Sorry für die vage Frage, lassen Sie mich erklären ...Gibt es eine Möglichkeit, Datenbanktransaktionen zu beschleunigen?

Ich habe eine Liste von Wörtern und zählt in einer Datenbank, die zweifellos eine gigantische Menge erreicht hat. ~ 80mb Datenbank mit jedem Eintrag zwei Spalten (Wort, Integer)

Jetzt, wenn ich versuche, ein Wort hinzuzufügen, überprüfe ich, ob es bereits in der Datenbank wie folgt ist ... Python sqlite3 Klassenmethode .. .

self.c.execute('SELECT * FROM {tn} WHERE {cn} = """{wn}"""'.format(tn=self.table1, cn=self.column1, wn=word_name)) 
exist = self.c.fetchall() 
if exist: 
    do something 
+1

Hat Ihre Tabelle einen Index? – idjaw

+0

manchmal nimmt der Index mehr Platz als die tatsächliche Tabelle – SnakeFoot

+0

@idjaw es nicht, ich lese darüber jetzt ... neu im Umgang mit Datenbanken – deltaskelta

Antwort

2

Sie suchen also nach der Existenz eines Wortes innerhalb einer sehr großen Tabelle von Wörtern? Ich denke, die kurze und einfache Antwort auf Ihre Frage ist, einen Index für Ihre Wortspalte zu erstellen.

Der nächste Schritt wäre, eine echte Datenbank (z. B. Postgres) anstelle von SQLite einzurichten. Sqlite verfügt nicht über Optimierungsoptimierungen einer Produktionsdatenbank und Sie werden wahrscheinlich nach dem Wechsel einen Leistungszuwachs sehen.

Auch für eine Tabelle mit Millionen von Zeilen sollte dies keine super zeitintensive Abfrage sein, wenn Ihre Tabelle ordnungsgemäß indiziert ist. Wenn Sie bereits einen Index haben und immer noch mit Leistungsproblemen konfrontiert sind, stimmt entweder etwas mit Ihrer Datenbankeinrichtung/Umgebung nicht oder es liegt ein Engpass in Ihrem Python-Code oder DB-Adapter vor. Schwer zu sagen ohne mehr Informationen.

+0

Ich habe keinen Index, und das ist es, was ich brauche, glaube ich. Ich bin neu bei DB, also wusste ich das vorher nicht. Vielen Dank – deltaskelta

1

ich könnte mir vorstellen, dass COUNT innerhalb von SQL mit schneller wäre:

self.c.execute('SELECT COUNT(*) FROM {tn} WHERE {cn} = """{wn}"""'.format(tn=self.table1, cn=self.column1, wn=word_name)) 
num = self.c.fetchone()[0] 
if num: 
    #do something 

obwohl ich es nicht getestet haben.

Eine ähnliche Frage finden Sie unter How to check the existence of a row in SQLite with Python?.

+0

hmm danke für die Eingabe. Das Problem ist, dass wenn die Zeile existiert, ich sie trotzdem auswählen muss. Denkst du immer noch, es wäre schneller, wenn ich beides machen müsste? – deltaskelta

Verwandte Themen