Saat ini saya mencoba untuk menyetel prosedur tersimpan yang agak bermasalah dan saya perhatikan bahwa sebagian besar biaya yang terkait dengan menjalankannya berasal dari parsing parsing beberapa XML ke dalam tabel temp. Inilah SQL yang dimaksud:
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)
Juga, jadi Anda memiliki beberapa gagasan tentang struktur XML yang diuraikan:
<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>
Apakah ada yang bisa saya lakukan untuk meningkatkan kinerja parsing node XML ini dan mengatur tabel temp ini?
sql-server
xml
temporary-tables
jdm5310
sumber
sumber
Jawaban:
Anda bisa mencoba
OPENXML
. Sekarang saya biasanya tidak merekomendasikanOPENXML
karena memiliki sejumlah masalah memori yang terkenal (pada dasarnya dapat mengambil 1/8 dari buffer pool Anda tergantung pada ukuran XML) (!! TODO add link). Bagaimanapun legenda memilikinya, lebih cepat untuk potongan XML yang lebih besar, jadi patut dicoba di lingkungan pengembang / pengujian dan jika Anda mengetahui masalah memori, dan Anda mendapatkan kinerja, terserah Anda untuk memutuskan mana yang paling Anda butuhkan. Sesuatu seperti ini:Ingatlah untuk selalu menelepon
sp_xml_removedocument
. Saya rasa XML Anda yang sebenarnya jauh lebih besar, dapatkah Anda memberi tahu kami berapa banyakRemark
elemen yang akan dimiliki dan berapa ukurannya dalam KB / MB. Saya akan kembali ke posting nanti dan membuat test rig untuk membandingkan kinerja berdasarkan statistik Anda.UPDATE: Menurut skrip contoh Anda, XML Anda hanya dapat memiliki maks 256
Remark
elemen dengan panjang maksimal 2500. Setelah membuat beberapa sampel XML untuk memenuhi kriteria ini dan mengujinya, ada sedikit kinerja antara kedua teknik, dan keduanya selesai dalam sub-detik. Dalam hal ini saya akan memilih tipe data XML dan metode. Bisakah Anda memberikan informasi lain yang diminta?sumber
Ada dua hal utama yang dapat Anda lakukan untuk meningkatkan kinerja parsing xml:
sumber