2009-12-03 4 views
0

Qui, en termes de performances de requête, est plus efficace? Considérant que T est une table, et PK est la clé primaire dans la table T. Sont-ils différents ou sont-ils juste une question de choix?Comparaison de requêtes SQL dans ProC avec et sans curseur

select col1, col2 into :var1, :var2 
    from T 
where PK = a 

... ou:

  1. EXEC CURSEUR SQL DECLARE aCursor POUR select col1, col2 dans: var1,: var2 de T où PK = a;
  2. EXEC SQL OUVERT aCursor
  3. EXEC SQL FETCH aCursor

Je pense que la déclaration d'un curseur pour récupérer une seule ligne à partir d'une table en fonction de clé primaire faire moins de sens que si la ligne unique pourrait être récupérée directement à la place?

Répondre

1

Si vous ne fecthing une seule rangée, je pas utiliser un curseur, qui semble plus tuer

+0

Oui Je suis d'accord avec vous, mais le point ici est: Est-ce que cela a un sens si d'autres points comme la performance, l'effectivité sont considérés. Je préfère toujours NE PAS UTILISER LE CURSEUR si j'ai besoin de sélectionner des valeurs basées sur la clé primaire. La seule rangée sera libérée car l'enregistrement a été récupéré sur la base de la clé primaire. –

0

SELECT INTO sera toujours plus rapide que d'utiliser un curseur.

Si vous n'effectuez rien pendant que le curseur est ouvert, cela ne sert à rien d'utiliser le curseur. Cela vient s'ajouter au fait que la recherche par le PK est garantie pour renvoyer une seule ligne, à condition que la valeur PK existe dans la table.

+0

Exactement, je suis sûr que tout en sélectionnant la colonne de la table la valeur correspondante étant sélectionnée existe dans la colonne Clé primaire –