|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre éclairé
![]() |
Bonjour à tous,
Ci-dessous 3 syntaxes différentes pour réaliser la même opération. Code SQL :
Après une rapide analyse, quand je lance les 3 requêtes dans l'estimateur de plan d'exécution, il m'annonce les consommations prévisionnelles suivantes : - Requête 1 : 15 % - Requête 2 : 67 % - Requête 3 : 18 % J'aurai pourtant dit, comme ça à l'instinct que la 3 ème requête serait la meilleure... Qu'en est-il en terme de lecture/écriture/cpu ? Cette répartition est-elle fiable avec 10 000 exécutions simultanées par exemples ? Pourquoi cet ordre là finalement ? A quoi sert cette 2ème syntaxe (et plus particulièrement l'instruction OUTER APPLY) si elle peut être remplacée par au moins 2 syntaxes plus performantes ? Merci d'avance pour vos suggestions/analyses
__________________
Arrêtez de poster des liens! Expliquez! (ça évite les erreur HTTP 404) ![]() L'homme est plus fort que la machine... ne renoncez jamais
|
||
|
|
00
|
|
|
#2 | ||
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Que donne l'exécution de ces 3 requêtes avec le plan d'exécution réel ?
Donner nous aussi les informations relatives à l'activation des options de statistiques suivantes : Code :
|
||
|
00
|
|
|
#3 | ||||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour,
sans connaitre les index sur vos tables, ni avoir les plans d’exécution, difficile de répondre précisément. que donne cette requête Code SQL :
pour ce qui est des IO et cpu, vous pouvez exécuter ceci : Code SQL :
|
||||
|
|
00
|
|
|
#4 |
|
Membre éclairé
![]() |
Voici ce que donne l'analyse dans l'ordre :
(4989*ligne(s) affectée(s)) Table 'Produit'. Nombre d'analyses 1, lectures logiques 720, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0. Table 'Produit_code_barre'. Nombre d'analyses 1, lectures logiques 29, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0. SQL Server \endash Temps d'exécution*: , Temps UC = 47*ms, temps écoulé = 345*ms. (4989*ligne(s) affectée(s)) Table 'Produit_code_barre'. Nombre d'analyses 4989, lectures logiques 15952, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0. Table 'Produit'. Nombre d'analyses 1, lectures logiques 720, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0. SQL Server \endash Temps d'exécution*: , Temps UC = 31*ms, temps écoulé = 638*ms. (4989*ligne(s) affectée(s)) Table 'Produit_code_barre'. Nombre d'analyses 1, lectures logiques 29, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0. Table 'Produit'. Nombre d'analyses 1, lectures logiques 720, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0. SQL Server \endash Temps d'exécution*: , Temps UC = 47*ms, temps écoulé = 469*ms.
__________________
Arrêtez de poster des liens! Expliquez! (ça évite les erreur HTTP 404) ![]() L'homme est plus fort que la machine... ne renoncez jamais
|
|
|
00
|
|
|
#5 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Il manque également la DDL de vos tables et de vos index présents sur celles-ci. Pouvez vous nous les mettre ?
Il faut savoir également que le comportement et la performance d'une requête peut changer avec la volumétrie. ++ |
|
00
|
|
|
#6 |
|
Membre éclairé
![]() |
Ce sont des table assez grosses (entre 500 000 et 1 000 000 d'enregistrements)
Pour le détail des tables, considérez simplement : PRODUIT : id_produit INT -> PK nom VARCHAR(250) id_type_produit INT PRODUIT_CODE_BARRE : id_produit INT , code_barre VARCHAR (50) -> PK
__________________
Arrêtez de poster des liens! Expliquez! (ça évite les erreur HTTP 404) ![]() L'homme est plus fort que la machine... ne renoncez jamais
|
|
|
00
|
|
|
#7 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Pas de foreign key entre vos 2 tables ? Pas d'autres index ?
++ |
|
00
|
|
|
#8 |
|
Membre Expert
![]() |
Le plan d’exécution réel peut être différent du plan estimé...
Lancez les requêtes une a une et plusieurs fois, ensuite tirez des conclusions... sur des temps aussi faible d'une exécution à l'autres vous pouvez avoir des temps assez changeant. Pour la solution la plus performante vous obtiendrez de meilleur résultat avec une vue indéxée sur la table des code barres en agregant le MAX par ID...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com