Ich habe eine XML-Datei in einer XML
Datentypspalte data
in meiner Tabelle records
gespeichert.SQL Server-Abfrage XML-Datentyp Leistungsproblem
Die Tabelle sieht wie folgt aus:
create table records
(
id int,
type nvarchar(28),
data xml,
posted datetime
)
XML-Daten:
<Properties>
<data>
<Name>novel</Name>
<Gender>Female</Gender>
<Age>32</Age>
<Salary>55k</Salary>
<Phone>123-123</Phone>
</data>
</Properties>
ich zur Zeit folgende Abfrage bin mit Daten aus dieser XML-Spalte zu extrahieren, die mehr als Minuten in 20K Aufzeichnungen nimmt.
select
id,
posteddate,
CONVERT(NVARCHAR(500), data.query('data(Properties/data/Name)')) AS Name,
CONVERT(NVARCHAR(500), data.query('data(Properties/data/Gender)')) AS Gender,
CONVERT(NVARCHAR(500), data.query('data(Properties/data/Age)')) AS Age,
CONVERT(NVARCHAR(500), data.query('data(Properties/data/Salary)')) AS Salary,
CONVERT(NVARCHAR(500), data.query('data(Properties/data/Phone)')) AS Phone
from
records
where
type = 'personnel_xml'
Ich bin sehr neu in XML-Extraktion in SQL Server. Ich glaube, ich befolge den standardoptimierten Ansatz zum Extrahieren von XML-Elementen nicht.
Also, kann jemand helfen, wie kann ich dieses Szenario zu optimieren, wie ich 100 solcher Elemente aus meinem XML als Spalte gespeichert extrahieren muss.
http://stackoverflow.com/users/1570000/john-cappelletti meine xml hat einzelne Datenelement, also in diesem Fall hoffe ich, dass ich Kreuz nicht anwenden muss. Also, aus der Perspektive der Performance, welche sollte man wählen, value() oder query()? – Aarush
@ JohnCappelleti was ist der Unterschied in der Leistung in 'Speichern der gesamten XML in #temp Tabelle und Extrahieren von #temp' ODER 'direkt aus table.column ohne Verwendung von #temp' für mein Szenario von 200s von Elementen ohne zu wiederholen Attribut – Aarush
@LearnByExample Korrekt, da Sie ein einzelnes Datenelement haben, müssen Sie das Kreuz nicht anwenden. und da Sie wissen, der Pfadwert wäre schneller als Abfrage. –