2 Stimmen

Leistung von SQL Alchemy

Ich arbeite an einem Projekt, für das eine große Datenbank benötigt wird. Derzeit verwenden wir SQLAlchemy, aber ich bin ein wenig besorgt über Leistungsprobleme. Meine Frage ist, mit einer Abfrage wie:

session.query(DataStorage).filter(DataStorage.storage_path.startswith(path)).all()

Wie führt SQLAlchemy die eigentliche Übersetzung und Filterung durch. Holt es sich alle Einträge aus DataStorage mit einer SELECT-Klausel und prüft dann jeden von ihnen? Oder weiß es, wie man den "filter(DataStorage.storage_path.startswith(path))" in SQL übersetzt? Wie groß sind die Leistungseinbußen bei der Verwendung von nativen SQL-Abfragen?

Grüße, Bogdan

2voto

Rick Punkte 14226

SqlAlchemy verwendet Ihren Code, um eine SQL-Anweisung zu generieren. In Ihrem Fall, Sie mit etwas wie oben:

SELECT * FROM DataStorage WHERE DataStorage.storage_path LIKE 'path%';

Die Abfrage wird in der Datenbank ausgeführt, sobald Sie .all() verwenden. In diesem Fall würden also alle Zeilen in einem Ergebnismengen-Iterator abgerufen und an Sie zurückgegeben.

1voto

Michael Mior Punkte 27045

Ich bin mit den speziellen SQLAlchemy-Konstrukten, die Sie verwenden, nicht vertraut, aber der beste Weg, dies herauszufinden, ist, es zu versuchen. Schalten Sie die Abfrageprotokollierung in MySQL ein und überprüfen Sie die Abfragen, die SQLAlchemy erzeugt. Sie können versuchen, die Abfrage von Hand zu schreiben und die Leistung der beiden zu vergleichen. (Dazu benötigen Sie eine Reihe von Testdaten in Ihrer Datenbank).

Im Allgemeinen kommen ORMs mit einfachen SELECTs, WHERE-Klauseln, ORDER BY usw. gut zurecht. Wenn Sie beginnen, viele Joins oder viele Verarbeitungen an den Daten vorzunehmen, sind die erstellten Abfragen in der Regel weniger optimal. Dies ist spezifisch für Ihre Anwendung. In der Regel schreibe ich die Abfragen mit dem ORM und optimiere und ersetze sie bei Bedarf durch SQL.

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