我有以下查詢,該查詢有效,但需要 30 多分鐘才能運行。最初的外部查詢撤回了大約 1400 行,然后子查詢在某些情況下撤回了 100 多行。
;WITH products AS (
SELECT
PromotionID,
ProductColourID,
ProductCode
FROM dbo.PromotionProducts
)
SELECT
P.ID,
P.Code,
P.Name,
P.EndDateTime,
prods = (
SELECT
pp.productColourId,
pp.ProductCode
FROM products
FOR JSON PATH
)
FROM dbo.Promotion P
JOIN products PP ON P.ID = PP.PromotionID
WHERE P.EndDateTime > GETDATE()
我能做些什么來加快速度嗎?
uj5u.com熱心網友回復:
您的查詢看起來不正確,因為子查詢與外部查詢無關(因此您將在每個外部行上獲得整個表),并且products不必要地第二次加入。
相反,只需執行單個相關子查詢:
SELECT
P.ID,
P.Code,
P.Name,
P.EndDateTime,
prods = (
SELECT
pp.productColourId,
pp.ProductCode
FROM dbo.PromotionProducts PP
WHERE P.ID = PP.PromotionID
FOR JSON PATH
)
FROM dbo.Promotion P
WHERE P.EndDateTime > GETDATE();
為了提高性能,您可能需要以下索引
Promotion (EndDateTime) INCLUDE (ID, Code, Name)
PromotionProducts (PromotionID) INCLUDE (productColourId, ProductCode)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/393008.html
標籤:json sql-server 查询语句
