您能帮我优化一下这个查询吗?我需要删除子查询,因为性能很差。
<div id="input1" style="margin-bottom: 50px">
<div class="pull-left" style="width: 250px;">
<select class="selectpicker" data-live-search="true" id="s1">
</select>
问题是我可以在相同的DATE和HOUR中拥有两个服务,因此我无法编写一个避免子查询的等效SQL。
查询在Legacy数据库上运行,我无法修改其元数据,并且它根本没有任何索引。这就是寻找可以避免相关查询的解决方案的原因。
谢谢。
答案 0 :(得分:4)
您可以使用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
此查询的性能除其他外,还取决于在两个表的连接列上有索引。