Ergebnismengen in MySQL durchlaufen: Cursor und temporäre Tabellen verwenden
Beim Schreiben gespeicherter Prozeduren in MySQL ist häufig eine Schleife erforderlich die Ergebnisse einer Auswahlabfrage und führt basierend auf den Daten zusätzliche Operationen oder bedingte Verzweigungen durch. Während Cursor eine einfache Möglichkeit zum Durchlaufen von Ergebnismengen bieten, sind sie nicht immer die effizienteste oder praktischste Lösung.
In diesem speziellen Szenario besteht das Ziel darin, Daten aus mehreren Tabellen anhand bestimmter Kriterien auszuwählen und dann zu erstellen Entscheidungen basierend auf den abgerufenen Werten. Ein Ansatz wäre, einen Cursor zu verwenden, um Zeilen einzeln abzurufen und die erforderlichen Prüfungen durchzuführen. Eine effizientere Alternative besteht jedoch darin, einen Cursor in Verbindung mit einer temporären Tabelle zu verwenden.
Hier ist eine modifizierte Version davon MySQL-Prozedur, die einen Cursor und eine temporäre Tabelle verwendet:
CREATE PROCEDURE GetFilteredData() BEGIN DECLARE bDone INT; DECLARE var1 CHAR(16); -- or approriate type DECLARE var2 INT; DECLARE var3 VARCHAR(50); DECLARE curs CURSOR FOR SELECT something FROM somewhere WHERE some stuff; DECLARE CONTINUE HANDLER FOR NOT FOUND SET bDone = 1; DROP TEMPORARY TABLE IF EXISTS tblResults; CREATE TEMPORARY TABLE IF NOT EXISTS tblResults ( -- Fld1 type, -- Fld2 type, -- ... ); OPEN curs; SET bDone = 0; REPEAT FETCH curs INTO var1, var2, var3; IF whatever_filtering_desired -- Here for whatever_transformation_may_be_desired INSERT INTO tblResults VALUES (var1, var2, var3); END IF; UNTIL bDone END REPEAT; CLOSE curs; SELECT * FROM tblResults; END
Diese Prozedur verwendet einen Cursor, um Zeilen aus der anfänglichen Auswahlabfrage abzurufen und prüft dann, ob eine bestimmte Bedingung vorliegt. Wenn die Bedingung erfüllt ist, werden die Werte in eine temporäre Tabelle mit dem Namen tblResults eingefügt. Nach dem Durchlaufen aller Zeilen wählt die Prozedur die gefilterten Daten aus der temporären Tabelle aus.
Obwohl Cursor in bestimmten Szenarien nützlich sein können, ist es wichtig, ihre Einschränkungen zu berücksichtigen. Sie können zu Leistungsengpässen führen und sind im Allgemeinen schwieriger zu handhaben als deklaratives SQL. Wenn möglich, wird empfohlen, die Verwendung von Cursorn zu vermeiden und stattdessen alternative Lösungen zu erkunden, z. B. die Verwendung von Fensterfunktionen, allgemeinen Tabellenausdrücken (CTEs) oder gespeicherten Funktionen.
Das obige ist der detaillierte Inhalt vonWie kann man Ergebnismengen in MySQL effizient durchlaufen: Cursor oder temporäre Tabellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!