我在以下(示例)选择语句中遇到性能问题,该语句使用子查询返回第一行:
SELECT ITEM_NUMBER,
PROJECT_NUMBER,
NVL((SELECT DISTINCT
FIRST_VALUE(L.LOCATION) OVER (ORDER BY L.SORT1, L.SORT2 DESC) LOCATION
FROM LOCATIONS L
WHERE L.ITEM_NUMBER=P.ITEM_NUMBER
AND L.PROJECT_NUMBER=P.PROJECT_NUMBER
),
P.PROJECT_NUMBER) LOCATION
FROM PROJECT P
通过执行 a andDISTINCT
导致性能问题,但我无法找到替代方案。SORT
UNIQUE
但是,我更喜欢类似于以下内容的内容,但在 2 个 select 语句中引用不起作用:
SELECT ITEM_NUMBER,
PROJECT_NUMBER,
NVL((SELECT LOCATION
FROM (SELECT L.LOCATION LOCATION
ROWNUM RN
FROM LOCATIONS L
WHERE L.ITEM_NUMBER=P.ITEM_NUMBER
AND L.PROJECT_NUMBER=P.PROJECT_NUMBER
ORDER BY L.SORT1, L.SORT2 DESC
) R
WHERE RN <=1
), P.PROJECT_NUMBER) LOCATION
FROM PROJECT P
另外: - 我的权限不允许我创建函数。- 我在主查询中循环浏览 10k 到 100k 条记录。- 子查询在限制为 1 行之前可以返回 3 到 7 行。
感谢您对提高性能的任何帮助。