Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie kann man Ergebnismengen in MySQL effizient durchlaufen: Cursor oder temporäre Tabellen?

Patricia Arquette
Freigeben: 2024-11-15 09:51:02
Original
425 Leute haben es durchsucht

How to Efficiently Loop Through Result Sets in MySQL: Cursors or Temporary Tables?

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
Nach dem Login kopieren

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 Vergleich zu deklarativem SQL im Allgemeinen schwieriger zu handhaben. 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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage