2012-04-08 8 views
3

Ich habe eine Abfrage, die ~ 1 Million Zeilen in folgendem Format zurück:pytables - wie das Abrufen von Daten beschleunigen in Liste

data = [[i['field1'], i['field2']] for i in tbl.where(conditions)] 

und es ist mehr als 5 Minuten unter.

Wenn ich selbst tbl.where(conditions) versuchte, dauerte die Abfrage weniger als eine Sekunde, so dass die meiste Zeit damit verbracht wird, über die Zeilen im Listenverständnis zu iterieren.

Gibt es eine schnellere Möglichkeit, Feld1/Feld2 aus der Abfrage abzurufen? (Ich habe genügend RAM, um die Ergebnisse im Speicher zu speichern)

Antwort

0

Ich weiß nichts über Ihre „TBL“ aber hier sind einige Dinge, die ich an aussehen:

  1. Ist Ihre Tabelle Kompression? print tbl.filters.complevel
  2. Vorausgesetzt, dass Ihre "Bedingungen" von den Tabellenfeldern abhängig sind, haben Sie einen Index für diese Felder erstellt? print tbl.indexedcolpathnames
  3. Was passiert, wenn Sie idx = tbl.get_where_list(conditions) verwenden, tbl[:]['field1'][idx]
  4. Wenn Sie genug RAM haben, versuchen Sie Ihre Datei im Speicher zu öffnen:
    h5file = tables.open_file('myfile.h5', driver="H5FD_CORE")
    tbl = h5file.root.tbl und sehen, ob das hilft.