Ceci est, espérons juste une simple question impliquant l'optimisation des performances en matière de requêtes en Sql 2008.Sql Optimisation: Xml ou Délimité chaîne
J'ai travaillé pour les entreprises qui utilisent stockées procs beaucoup pour leurs processus ETL comme ainsi que certains de leurs sites Web. J'ai vu le scénario où ils ont besoin de récupérer des enregistrements spécifiques en fonction d'un ensemble fini de valeurs clés. Je l'ai vu manipulé de 3 manières différentes, illustré par pseudo-code ci-dessous.
Sql dynamique qui concatène une chaîne et l'exécute.
EXEC('SELECT * FROM TableX WHERE xId IN (' + @Parameter + ')'
Utilisation d'une fonction définie par l'utilisateur pour diviser une chaîne délimitée dans une table
SELECT * FROM TableY INNER JOIN SPLIT(@Parameter) ON yID = splitId
XML en utilisant comme paramètre au lieu d'une valeur de varchar délimitée
SELECT * FROM TableZ JOIN @Parameter.Nodes(xpath) AS x (y) ON ...
Même si je sais que la création du SQL dynamique dans le premier extrait est une mauvaise idée Pour un grand nombre de raisons, ma curiosité vient des deux derniers exemples. Est-il plus efficace de faire preuve de diligence raisonnable dans mon code pour transmettre ces listes via XML comme dans l'extrait 3 ou est-il préférable de simplement délimiter les valeurs et d'utiliser un fichier udf pour s'en occuper?
+1. Belle prise. – Quassnoi
Cela ne suffirait-il pas, assez souvent, à pousser le besoin d'analyser-n-charger les données en format tabulaire en amont de l'application? À quel point, qu'est-ce qui est le plus rapide ici - XML ou analyse de code en boucle? –
+1 Excellente explication sur l'utilisation des paramètres de table du côté du code au-delà de DataReaders et DataTables. – JamesEggers