Ich versuche derzeit, eine etwas problematische gespeicherte Prozedur zu optimieren, und ich habe festgestellt, dass der größte Teil der mit der Ausführung verbundenen Kosten durch das Parsen von XML in eine temporäre Tabelle entsteht. Hier ist die betreffende SQL:
CREATE TABLE #ChangeSet
(
RemarkTypeID TINYINT NOT NULL PRIMARY KEY,
RemarkText VARCHAR(2500) NOT NULL,
ListingID INT NOT NULL
)
INSERT INTO #ChangeSet
(RemarkTypeID,
RemarkText,
ListingID)
SELECT
T.c.value('@RemarkTypeID[1]','tinyint') AS RemarkTypeID,
T.c.value('@RemarkText[1]','varchar(2500)') AS RemarkText,
@ListingID
FROM @RemarksXml.nodes('/Remarks[1]/Remark') AS T(c)
Sie haben also auch eine Vorstellung von der Struktur des zu analysierenden XML:
<Remarks>
<Remark xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" RemarkID="211767" DateTimeCreated="1991-11-19T10:43:50" DateTimeModified="1992-01-01T10:43:50" RemarkTypeID="8" RemarkText="aaaWasher,Dryer,Refriger,Microwav" />
<Remark xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" RemarkID="211768" DateTimeCreated="1991-11-19T10:43:50" DateTimeModified="1992-01-01T10:43:50" RemarkTypeID="3" RemarkText="aaaell Maintained 3Bd 1.5Ba Semi-Detached Home In Cambridge Gardens. Garage W As Converted Into A Nice Family Room The Outside Is Maintence Free. Includes All Appliances,Security System,Storage Shed,Ceiling Fans And New Carpet.This Home Is Very Well Pricded. Seller Will Consider Fha Or Va Along With Conventional Finacing. This Is A Great Buy." />
</Remarks>
Kann ich irgendetwas tun, um die Leistung beim Parsen dieser XML-Knoten und beim Einrichten dieser temporären Tabelle zu verbessern?
sql-server
xml
temporary-tables
jdm5310
quelle
quelle
Antworten:
Du könntest es versuchen
OPENXML
. Jetzt empfehle ich normalerweise nicht,OPENXML
da es eine Reihe bekannter Speicherprobleme gibt (im Grunde kann es je nach Größe des XML 1/8 Ihres Pufferpools dauern) (!! TODO Link hinzufügen). Wie die Legende sagt, ist es für größere XML-Teile schneller. Es lohnt sich also, es in einer Entwicklungs- / Testumgebung auszuprobieren. Wenn Sie die Speicherprobleme kennen und die Leistung erhalten, liegt es an Ihnen, zu entscheiden, welche Sie am meisten benötigen. Etwas wie das:Denken Sie daran, immer anzurufen
sp_xml_removedocument
. Ich vermute, Ihr echtes XML ist viel größer. Können Sie uns eine Vorstellung davon geben, wie vieleRemark
Elemente es haben wird und wie groß KB / MB ist? Ich werde später auf den Beitrag zurückkommen und einen Prüfstand einrichten, um die Leistung anhand Ihrer Statistiken zu vergleichen.UPDATE: Gemäß Ihrem Beispielskript kann Ihr XML nur maximal 256
Remark
Elemente mit einer maximalen Länge von 2500 enthalten. Nachdem Sie ein Beispiel-XML erstellt haben, um diese Kriterien zu erfüllen und es zu testen, ist die Leistung zwischen den beiden Techniken und beiden gering in Sekundenschnelle beenden. In diesem Fall würde ich den XML-Datentyp und die XML-Methoden auswählen. Können Sie bitte die anderen angeforderten Informationen angeben?quelle
Sie können zwei wichtige Maßnahmen ergreifen, um die XML-Parsing-Leistung zu verbessern:
quelle