sql-server - 在 ROW_NUMBER() OVER ( ORDER BY ) 中使用 case 语句会导致严重的性能问题
问题描述
使用 case 语句ROW_NUMBER() OVER (ORDER BY)
会导致严重的性能问题。
我有两个查询,第一个在 5 秒内运行,第二个需要几分钟才能运行。我正在尝试使用传递给存储过程的值进行排序。请让我知道如何解决此问题。
查询 #1:
SELECT TOP (10)
ROW_NUMBER() OVER (ORDER BY POData.PurchaseOrderNumber) AS ROW_NUM,
Received.QuantityReceived, POData.PurchaseOrderNumber,
POData.*
FROM
POData
INNER JOIN
Received ON POData.Id = Received.PODataId
查询 #2:
DECLARE @OrderBy nvarchar(32) = 'PurchaseOrderNumber'
SELECT TOP(10)
ROW_NUMBER() OVER (ORDER BY
CASE
WHEN @OrderBy = 'PurchaseOrderNumber'
THEN POData.PurchaseOrderNumber
END) AS ROW_NUM,
Received.QuantityReceived, POData.*
FROM
POData
INNER JOIN
Received ON POData.Id = Received.PODataId
解决方案
推荐阅读
- php - Laravel vue js 实时部署应用程序
- splunk - Splunk 查询以从 json 类型的日志中按统计信息列出
- machine-learning - 在 DDQN 上使用 Actor Critic 的优缺点
- jira - JIRA 中的项目规划支持
- linux - Raspberry PI 中的蓝牙连接
- r - 将精确值与跨列的许多有效数字进行比较
- php - Ajax html 输入值显示为空
- javascript - Javascript 的当前官方/推荐 MIME 类型是什么?
- c++ - 使用 Info-ZIP 3.0 源代码时出现编译器错误
- android - 如何创建一个在调用时具有 addOnSuccessListener 的函数