Tôi chưa quen với SQL, bạn có thể vui lòng gợi ý cho tôi cách cải thiện mã SQL bên dưới không, tôi đã quan sát thấy việc sử dụng trình lược tả SQL - thao tác đọc XML mất quá nhiều thời gian.
Vui lòng cho tôi biết làm cách nào để viết lại mã bên dưới để tôi có thể thấy hiệu suất được cải thiện.
Đây - edata là Cột XML Và mã bên dưới là một phần của thủ tục được lưu trữ chính của tôi, chỉ bên dưới mã có vấn đề về hiệu suất Và bảng erequest đã được lập chỉ mục
KHAI BÁO @SFD BẢNG
(
BIGINT,
eSố DECIMAL(12, 2),
eDate NGÀY
)
CHÈN VÀO @SFD
CHỌN tr.etid,
tr.edata.value('(EData/Số tiền)[1]', 'DECIMAL(12, 2)') eSố tiền,
tr.edata.value('(EData/DrawDate)[1]','date') eDate
TỪ dbo.erequest tr
WHERE tr.accountid = @AccountId
TRONG truy vấn trên - các dòng sau mất quá nhiều thời gian,
**tr.edata.value('(EData/Số tiền)[1]', 'DECIMAL(12, 2)') eSố tiền,
tr.edata.value('(EData/DrawDate)[1]','date') eDate**
Vui lòng tư vấn cho tôi, làm cách nào để viết lại các dòng trên trong truy vấn sql chính để tôi có thể thấy sự cải thiện về hiệu suất.
Vui lòng tìm truy vấn bên dưới để điền dữ liệu Bảng:
Tạo bảng erequest
(
BIGINT,
dữ liệu XML,
tài khoản INT
)
CHÈN VÀO GIÁ TRỊ erequest (etid,edata,accountid) (2145124897,
'<dữ liệu>
<CardHolderName>ABCFDE</CardHolderName>
<CardNumber>K6011</CardNumber>
<Amount>555,17</Amount>
<DrawDate>18-05-2022</DrawDate>
<CurrencyCode>USD</CurrencyCode>
</edata>',10)
CHÈN VÀO GIÁ TRỊ erequest (etid,edata,accountid) (2145124897,
'<dữ liệu>
<CardHolderName>ABCFDE</CardHolderName>
<CardNumber>K6011</CardNumber>
<Amount>555,17</Amount>
<DrawDate>18-05-2022</DrawDate>
<CurrencyCode>USD</CurrencyCode>
</edata>',20)
CHÈN VÀO GIÁ TRỊ erequest (etid,edata,accountid) (2145124897,
'<dữ liệu>
<CardHolderName>ABCFDE</CardHolderName>
<CardNumber>K6011</CardNumber>
<Amount>555,17</Amount>
<DrawDate>18-05-2022</DrawDate>
<CurrencyCode>USD</CurrencyCode>
</edata>',30)
CHÈN VÀO GIÁ TRỊ erequest (etid,edata,accountid) (2145124897,
'<dữ liệu>
<CardHolderName>ABCFDE</CardHolderName>
<CardNumber>K6011</CardNumber>
<Amount>555,17</Amount>
<DrawDate>18-05-2022</DrawDate>
<CurrencyCode>USD</CurrencyCode>
</edata>',12)
CHÈN VÀO GIÁ TRỊ erequest (etid,edata,accountid) (2145124897,
'<dữ liệu>
<CardHolderName>ABCFDE</CardHolderName>
<CardNumber>K6011</CardNumber>
<Amount>555,17</Amount>
<DrawDate>18-05-2022</DrawDate>
<CurrencyCode>USD</CurrencyCode>
</edata>',16)