SQL subselect 语句在某些机器上非常慢
SQL subselect statement very slow on certain machines
我有一个 sql 语句,其中我从 table(机器)获取所有 ID 的列表。
然后需要 (Events) 中另一行的最新实例,其中 id 匹配所以一直在做子选择。
我需要很多与 id 匹配的字段的最新实例,所以在这个单一语句中一个接一个地进行这些子选择,所以最终得到类似于这样的结果...
这行得通并且结果很准确,只是变得非常慢,因为事件 Table 有数百万条记录。机器 table 平均有 100 条记录。
是否有更好的子选择解决方案?也许做内连接或存储过程?
感谢帮助:)
您可以使用 apply
。您没有指定如何定义“最新实例”。让我假设它基于时间列:
Select a.id, b.*
from TableA a outer apply
(select top(1) b.Name, b.time, b.weight
from b
where b.id = a.id
order by b.time desc
) b;
APPLY
和相关的子查询都需要一个 ORDER BY
来执行您想要的操作。
APPLY
很像 FROM
子句中的相关查询——有两个方便的增强功能。横向连接——从技术上讲是 APPLY
的作用——可以 return 多行和多列。
我有一个 sql 语句,其中我从 table(机器)获取所有 ID 的列表。
然后需要 (Events) 中另一行的最新实例,其中 id 匹配所以一直在做子选择。
我需要很多与 id 匹配的字段的最新实例,所以在这个单一语句中一个接一个地进行这些子选择,所以最终得到类似于这样的结果...
这行得通并且结果很准确,只是变得非常慢,因为事件 Table 有数百万条记录。机器 table 平均有 100 条记录。
是否有更好的子选择解决方案?也许做内连接或存储过程?
感谢帮助:)
您可以使用 apply
。您没有指定如何定义“最新实例”。让我假设它基于时间列:
Select a.id, b.*
from TableA a outer apply
(select top(1) b.Name, b.time, b.weight
from b
where b.id = a.id
order by b.time desc
) b;
APPLY
和相关的子查询都需要一个 ORDER BY
来执行您想要的操作。
APPLY
很像 FROM
子句中的相关查询——有两个方便的增强功能。横向连接——从技术上讲是 APPLY
的作用——可以 return 多行和多列。