Maison > base de données > tutoriel mysql > Comment parcourir efficacement les ensembles de résultats dans MySQL : curseurs ou tables temporaires ?

Comment parcourir efficacement les ensembles de résultats dans MySQL : curseurs ou tables temporaires ?

Patricia Arquette
Libérer: 2024-11-15 09:51:02
original
505 Les gens l'ont consulté

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

Bouclage sur des ensembles de résultats dans MySQL : utilisation de curseurs et de tables temporaires

Lors de l'écriture de procédures stockées dans MySQL, il est souvent nécessaire d'effectuer une boucle sur les résultats d'une requête de sélection et effectuer des opérations supplémentaires ou un branchement conditionnel en fonction des données. Bien que les curseurs fournissent un moyen simple de parcourir des ensembles de résultats, ils ne constituent pas toujours la solution la plus efficace ou la plus pratique.

Dans ce scénario spécifique, l'objectif est de sélectionner des données dans plusieurs tables en fonction de critères spécifiques, puis de faire décisions basées sur les valeurs récupérées. Une approche consisterait à utiliser un curseur pour récupérer les lignes une par une et effectuer les vérifications nécessaires, mais une alternative plus efficace consiste à utiliser un curseur en conjonction avec une table temporaire.

Voici une version modifiée du Procédure MySQL qui utilise un curseur et une table temporaire :

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
Copier après la connexion

Cette procédure utilise un curseur pour récupérer les lignes de la requête de sélection initiale, puis vérifie une condition spécifique. Si la condition est remplie, les valeurs sont insérées dans une table temporaire nommée tblResults. Après avoir parcouru toutes les lignes, la procédure sélectionne les données filtrées dans la table temporaire.

Bien que les curseurs puissent être utiles dans certains scénarios, il est important de considérer leurs limites. Ils peuvent introduire des goulots d'étranglement en termes de performances et sont généralement plus difficiles à utiliser que le SQL déclaratif. Si possible, il est recommandé d'éviter d'utiliser des curseurs et d'explorer plutôt des solutions alternatives telles que l'utilisation de fonctions de fenêtre, d'expressions de table communes (CTE) ou de fonctions stockées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal