Bonjour,
J'explique un peu mon cas, je suis en train de travailler sur un rapport (qui forcément s'appuie sur une belle requête SQL, sinon le sujet serait au mauvais endroit).
Ce rapport va avoir des paramètres qui devront avoir chacun une valeur unique : le grammage papier (qui ne me pose pas de problème actuellement), un nom de machine (qui est le paramètre compliquant de la requête), une date de début, une date de fin.
Mon nom de machine aura donc une valeur unique mais va à la fois correspondre (parce que je dois piocher mes infos dans plusieurs tables différentes) à un nvarchar(50) (j'ai déjà eu des soucis de typage de mon paramètre dans une version simplifiée de la requête) dans une table ET à un int (l'ID de la machine) dans une autre table.
Je n'ai pour le moment pas de table qui me permet de faire la correspondance entre le nvarchar(50) et l'int, sinon c'était un "non_sujet" puisque j'aurais ajouté une jointure supplémentaire à la requête.
Pour pallier à ça, j'aurais bien ajouté dans les clauses WHERE un CASE, mais voilà ce que ça donnerait (en gros) :
Est-ce que c'est une forme "acceptable" d'un point de vue du serveur SQL (MS SQL Server pour la précision)?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 SELECT 'mes colonnes' FROM 'mes tables' WHERE EXISTS (SELECT 'un id' FROM 'une table' WHERE 'id commande' = 'id de commande de la requête principale' AND Grammage = @Gram -- où @Gram est mon 1er paramètre) AND (CASE WHEN @Machine = 'Cas1' -- où @Machine est le Nom de machine (SELECT 'date de début' FROM 'une autre table' WHERE 'id machine' = 'mon int1') BETWEEN @Debut AND @ Fin -- où @Debut et @Fin sont les dates de début et de fin passées en paramètres WHEN @Machine = 'Cas2' (SELECT 'date de début' FROM 'une autre table' WHERE 'id machine' = 'mon int2)' BETWEEN @Debut AND @ Fin END)
Est-ce qu'en termes de performances ça ne va pas "surcharger" le serveur (je sais que le rapport est voué à être généré tous les jours, donc le but n'est pas que le serveur mette 8h à le générer, il aura bien d'autres demandes dans sa journée!)?
Et, n'étant pas un crack en administration des BDD ni un champion de la programmation, j'ai aussi un peu peur que cette manière de procéder soit un peu "crade", est-ce que vous voyez des optimisations possibles sur la requête? (je ne peux pas toucher à la conception des BDD, c'est utilisé par un ERP d'un éditeur donc pas question d'y mettre le bazar).
Merci d'avance pour vos réponses
Partager