Sql server 使用行号()比较N和N-1记录。。性能问题
我试图比较[N]和[N-1]记录,Sql server 使用行号()比较N和N-1记录。。性能问题,sql-server,tsql,Sql Server,Tsql,我试图比较[N]和[N-1]记录,按c\u id顺序按b\u id DESC划分。查询执行得很好,但对于ROW\u NUMBER()函数运行得非常慢。最昂贵的领域是索引查找、分区排序和散列匹配。是否有任何方法可以编写查询以提高性能 Select [N].*,[N-1]* from ( ( Select p_id,b_id,c_id,cust_name,TNP,TRQI,First_One_Latest from ( Selec
按c\u id顺序按b\u id DESC划分。查询执行得很好,但对于ROW\u NUMBER()
函数运行得非常慢。最昂贵的领域是索引查找、分区排序和散列匹配。是否有任何方法可以编写查询以提高性能
Select [N].*,[N-1]* from
(
(
Select p_id,b_id,c_id,cust_name,TNP,TRQI,First_One_Latest
from (
Select p_id, b_id, c_id, cust_name, TNP, TRQI,
ROW_NUMBER() OVER (Partition By c_id ORDER BY b_id DESC) First_One_Latest
from data.Counterparty_Credit_Risk
where ISNUMERIC(c_id)=1
and cust_src_system=N'SET1'
) As FIRST
where FIRST.First_One_Latest=1
) As [N]
INNER JOIN
(
Select p_id,b_id,c_id,cust_name,TNP,TRQI,First_One_Latest
from (
Select p_id,b_id,c_id,cust_name,TNP,TRQI
,ROW_NUMBER() OVER (Partition By c_id ORDER BY b_id DESC) First_One_Latest
from data.Counterparty_Credit_Risk
where ISNUMERIC(c_id)=1
and cust_src_system=N'SET1'
) As Second
where Second.First_One_Latest=2
) As [N-1]
ON N.c_id = [N-1].c_id
)
请参阅,了解如何在问题中包含执行计划。执行计划是(大多数)查询性能问题的起点。公共表表达式(CTE)允许您生成一次行号,然后将生成的行连接在一起。通常,mysql
和sqlserver
标记是不兼容的(如它们的描述中所述)。您需要一个同时适用于这两个行的解决方案吗?您真的想要当前行和上一行的所有列吗?如果没有,您可以使用LAG
函数。可能存在重复问题;)。