Gab*_*rio 7 sql-server max sqlperformance query-performance
我有一个性能不佳的查询...我做错了什么?请帮助我,它在我的系统中执行了无数次,解决后将带给我通往天堂的阶梯
我使用sp_Blitz对系统进行了检查,未发现任何致命问题
这是查询:
SELECT MAX(F.id) OVER (PARTITION BY idstato ORDER BY F.id DESC) AS id
FROM jfel_tagxml_invoicedigi F
INNER JOIN jfel_invoice_state S ON F.id = S.idinvoice
WHERE S.idstato = @idstato
AND S.id = F.idstatocorrente
AND F.sequence_invoice % @number_service_installed = @idServizio
ORDER BY F.id DESC,
F.idstatocorrente OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY;
Run Code Online (Sandbox Code Playgroud)
这是查询计划
https://www.brentozar.com/pastetheplan/?id=SyYL5JOeE
我可以私下向您发送我的系统属性
更新:进行了一些修改,它是更好,但我认为可能会更好...这是新的查询:
SELECT MAX(F.id) AS id
FROM jfel_tagxml_invoicedigi F
INNER JOIN jfel_invoice_state S ON F.id = S.idinvoice
WHERE S.idstato = @idstato
AND S.id = F.idstatocorrente
AND F.sequence_invoice % @number_service_installed = @idServizio;
Run Code Online (Sandbox Code Playgroud)
和新计划:https : //www.brentozar.com/pastetheplan/?id=SJ-5GDqeE
更新:进行了一些修改,它是更好,但我认为可能会更好...这是新的查询:
SELECT top 1 F.id as id
FROM jfel_tagxml_invoicedigi AS F
INNER JOIN jfel_invoice_state AS S
ON F.idstatocorrente = S.id
WHERE S.idstato= 1 AND S.id = F.idstatocorrente
and S.datastato > dateadd(DAY,-5,getdate())
AND F.progressivo_fattura % 1 = 0
ORDER BY S.datastato
Run Code Online (Sandbox Code Playgroud)
还有新的新计划 https://www.brentozar.com/pastetheplan/?id=S1xRkL51S
数据计算是不可控制的,您可以尝试使用带有 OPTION RECOMPILE 的变量:
DECLARE @d Date
SET @d = dateadd(DAY,-5,getdate())
SELECT top 1 F.id as id
FROM jfel_tagxml_invoicedigi AS F
INNER JOIN jfel_invoice_state AS S
ON F.idstatocorrente = S.id
WHERE S.idstato= 1 AND S.id = F.idstatocorrente
and S.datastato > @d
AND F.progressivo_fattura % 1 = 0
ORDER BY S.datastato
OPTION (RECOMPILE)
Run Code Online (Sandbox Code Playgroud)