web-dev-qa-db-fra.com

MS SQL Server: plusieurs requêtes dans un lot s'exécutent-elles jamais en parallèle et si oui, que se passe-t-il lorsque la deuxième requête dépend de la première?

Si j'ai un lot de deux instructions SELECT différentes, est-il possible qu'elles soient exécutées en parallèle (si l'Optimiseur SQL le considère comme la méthode d'exécution la plus efficace)?

Si la première instruction SELECT sélectionne dans une table temporaire et que la deuxième instruction SELECT est ensuite insérée dans cette même table temporaire, cela l'empêche-t-il d'être possible d'exécuter les deux instructions dans parallèle?

(Je suppose que les réponses sont oui et oui :).

6
J.D.

Les instructions de lot ne sont jamais exécutées en série que dans l'ordre où elles apparaissent dans le lot.

Maintenant, si vous avez deux instructions envoyées au serveur par deux lots différents, elles s'exécuteront indépendamment et essentiellement simultanément (verrouillage et verrouillage de côté).

Prenons par exemple le code suivant:

CREATE TABLE #t
(
    i int
);

INSERT INTO #t (i) VALUES (0);

Le CREATE TABLE s'exécute toujours avant le INSERT INTO déclaration. Considère ceci:

SELECT 1;

SELECT 2;

Le code ci-dessus sera toujours exécuté dans l'ordre, c'est-à-dire SELECT 1 s'exécute d'abord , puis une fois terminé, SELECT 2 s'exécute.

Il existe plusieurs façons d'exécuter simultanément des lots indépendants, y compris l'utilisation de Multiple Active Result Sets, ou MARS , mais aucun d'entre eux n'affecte le traitement en série des instructions au sein d'un même lot.

9
Max Vernon