C'est fou, mais la performance de la requête est d'environ 50% pire après avoir ajouté un index XML primaire à mon champ xml.SQL Server 2008 - Pourquoi la performance est-elle FORTE avec l'index xml?
Voici ce que je fais.
I ont une table contenant un champ XML ActivityStepLog (contient logData, XML)
I générer des données d'échantillon à insérer dans ce tableau en exécutant ce qui suit
INSERT INTO dbo.ActivityStepLog (
LogGUID
, LogContextID
, LogTypeID
, LogSourceName
, LogContent
, LogDate
, CreateDate
, CreatedBy
)
sélectionner
LogGUID = newid()
, LogContextID = newid()
, LogTypeID = 2
, LogSourceName = « test test test '
, LogContent = (SELECT haut 1 * FROM ## SampleData SampleData1 où DecisionLogID = SampleData.DecisionLogID POUR XML AUTO, ELEMENTS, ROOT (' BusinessRule '))
, LogDate = CURRENT_TIMESTAMP
, CreateDate = current_timestamp
, CreatedBy = 'test créer par'
de ## SampleData SampleData
SampleData a 100.000 lignes, je l'exécuter dans une boucle 5 fois finissent donc avec 500 000 lignes
Le champ LogContent va finir par avoir des données telles que les suivantes:
-2147483643 0569281A-D1A3-49E3-9E68-BCAC62E2C1C3 -2147483495 2009-05-18T11: 47: 00 aucun
(désolé, je ne sais pas si cela sera correctement formaté - c'est juste un petit ensemble d'éléments).
Et puis je viens de lancer un sql très simple -
SELECT *
FROM ActivityStepLog
WHERE LogContent.value('(/BusinessRuleDecisionLog/SampleData1/DecisionLogID)[1]', 'int') = -2147483535
Avant de créer l'index XML primaire sur LogContent, il faut 8 secondes, après, il faut environ 12 secondes. J'ai nettoyé le cache, etc (DROPCLEANBUFFERS et FREEPROCCACHE), cela ne semble pas affecter les proportions mais cela affecte le temps global.
Voilà mes statistiques:
AVEC index xml table 'xml_index_nodes_325576198_256000'. Nombre d'analyses 1000000, lectures logiques 3517272, lectures physiques 0, lectures en lecture anticipée 0, lectures logiques lob 0, lectures physiques lob 0, lectures lues en lecture anticipée 0. Table 'ActivityStepLog'. Analyse nombre 1, logique lit 71694, physique lit 0, lecture anticipée lit 0, lob lectures logiques 0, lectures physiques lob 0, lob lecture anticipée lit 0.
Avec OUT index XML
(5 rangs (s) affecté (s)) Tableau 'ActivityStepLog'. Nombre de balayages 1, lectures logiques 71694, lectures physiques 0, lectures anticipées 0, lectures logiques lob 0, lectures physiques lob 0, lectures anticipées lob 0.
Ainsi, les lectures logiques sont beaucoup moins avec le xml indice. J'ai essayé d'ajouter TOUS les index secondaires disponibles, ce qui n'a pas amélioré les performances par rapport à un index xml primaire.
Je ferai d'autres recherches à ce sujet, mais j'apprécierais vraiment les pointeurs ou les commentaires.
merci, Sylvia
Parce que vous avez besoin d'un index secondaire en plus le principal - pour le chemin IIRC –
Merci pour le commentaire, mais comme je l'ai mentionné dans mon post, j'ai ajouté tous les index XML secondaires disponibles, mais avez ne voit aucune augmentation de performance. – Sylvia