Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何优化此查询?_Sql_Sql Server 2005_Xquery - Fatal编程技术网

Sql 如何优化此查询?

Sql 如何优化此查询?,sql,sql-server-2005,xquery,Sql,Sql Server 2005,Xquery,我不熟悉XQuery。 请建议一种优化以下查询的方法 我已经尝试了下面的查询,它花费的时间比预期的要多 Select A.a_name, I.p_type, SUM(P.c_n_amount) AS c_n_amount, CASE WHEN SUM(ABS(M_value)) = 0 THEN 0 ELSE SUM(ABS(Price) * ABS(M_value)) / SUM(ABS(M_value)) END AS [price], SUM(M_value) AS m_valu

我不熟悉XQuery。 请建议一种优化以下查询的方法

我已经尝试了下面的查询,它花费的时间比预期的要多

Select 
A.a_name, 
I.p_type, 
SUM(P.c_n_amount) AS c_n_amount,
CASE  WHEN SUM(ABS(M_value)) = 0 THEN 0
ELSE SUM(ABS(Price) * ABS(M_value)) / SUM(ABS(M_value)) END AS 
[price],
SUM(M_value) AS m_value,SUM(N50) [-50],SUM(P50) [50]
from  position P 
INNER JOIN COUNT AS A ON P.a_id = A.a_id 
INNER JOIN I_VIEW AS I ON P.i_id = I.i_id 
inner join (
select R_C.p_id,M_value,Price,N50,P50
from(
select j.p_id,
C.value('(Result[@resultName = "m_value"]/resultValue)[1]', 'float') as M_value,
C.value('(Result[@resultName = "price"]/resultValue)[1]', 'float') as Price
from  jyothi_xml j CROSS APPLY resultkeys.nodes('/Results')  T(C) 
where r_set='POLY' and r_category ='sk')  R_Category,
(select j1.p_id,
C.value('(Result[@resultName = "rate_shock_n50"]/resultValue)[1]', 'float') as N50,
C.value('(Result[@resultName = "rate_shock_p50"]/resultValue)[1]', 'float') as P50
from jyothi_xml j1 CROSS APPLY resultkeys.nodes('/Results')  T(C)
where result_set='POLY' and result_category ='rate_shocks')  R_S_Category,position p
where p.p_id=R_Category.p_id and p.p_id=R_S_Category.p_id) XMlData  on p.p_id=XMlData.p_id
WHERE P.as_of_date = '2012-10-10' 
GROUP BY A.a_name, I.p_type

如果有很多XML需要解析,那么首先限制需要使用XML的行,然后解析它们是非常有益的。因此,如果可以的话,从Position、Count和I_View表中找出您需要什么,然后在jyothi_xml表中搜索这些id。我发现这对我的查询有很大帮助。

您操作的数据是什么?你的预期结果是什么?通常,在XQuery中,尽早使用谓词是有益的,也就是说,不要使用(Result[@resultName=“m_value”]/resultValue)[1]而使用(Result[@resultName=“m_value”][1]/resultValue)。然而,我想XQuery并不是这里的瓶颈。相反,您有一个非常昂贵的SQL连接、聚合和子查询。相比之下,您的XQuery似乎是简单的数据提取。请首先检查,XQuery确实是这里的问题。