gpt4 book ai didi

sql - 优化查询(删除子查询)

转载 作者:行者123 更新时间:2023-12-01 23:29:37 26 4
gpt4 key购买 nike

你能帮我优化这个查询吗?。我需要删除子查询,因为性能很糟糕。

select LICENSE,
(select top 1 SERVICE_KEY
from SERVICES
where SERVICES.LICENSE = VEHICLE.LICENSE
order by DATE desc, HOUR desc)
from VEHICLE

问题是我可以在同一个 DATE 和 HOUR 上有两个 SERVICES,所以我无法编写一个等效的 SQL 来避免子查询。

该查询在我无法修改其元数据的旧数据库上运行,并且它根本没有任何索引。这就是寻找可以避免相关查询的解决方案的原因。

谢谢你。

最佳答案

您可以使用 ROW_NUMBER() 表达您的查询无需相关子查询。尝试以下查询,看看性能如何:

SELECT t.LICENSE, t.SERVICE_KEY
FROM
(
SELECT t1.LICENSE, t1.SERVICE_KEY
ROW_NUMBER() OVER (PARTITION BY t1.LICENSE
ORDER BY t2.DATE DESC, t2.HOUR DESC) rn
FROM VEHICLE t1
INNER JOIN SERVICES t2
ON t1.LICENSE = t2.LICENSE
) t
WHERE t.rn = 1

该查询的性能取决于两个表的连接列上的索引等。

关于sql - 优化查询(删除子查询),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41717661/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com