首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怎么优化sql语句

2012-06-06 
请教高手如何优化sql语句sql语句有点长,当数据很多的时候查询很影响速度,请问这个语句可以怎么优化呢?SELE

请教高手如何优化sql语句
sql语句有点长,当数据很多的时候查询很影响速度,请问这个语句可以怎么优化呢?

SELECT T_ITEM.F_DESC, T_ITEM.F_UNIT, SMP_APDTL.F_ID, SMP_APDTL.F_ITEMID, SMP_APDTL.F_DOCQTY, SMP_APDTL.F_TRANSID, 
CONVERT(numeric(18,4), SMP_APDTL.F_NEWUNITAMT) AS F_NEWUNITAMT, CONVERT(numeric(18, 6), 
SMP_APDTL.F_AMT / SMP_APDTL.F_DOCQTY) AS F_UNITAMT, CONVERT(numeric(18, 2), SMP_APDTL.F_AMT) AS F_AMT, 
CONVERT(numeric(18, 2), SMP_APDTL.F_AMT / (1+T_SALESORDHDR.F_TAXRATE) * T_SALESORDHDR.F_TAXRATE) AS F_TAXAMT, 
CONVERT(numeric(18, 2), SMP_APDTL.F_UNITAMT) AS F_FUNITAMT, CONVERT(numeric(18, 2), 
SMP_APDTL.F_UNITAMT * SMP_APDTL.F_DOCQTY) AS F_FAMT, CONVERT(numeric(18, 2), SMP_APDTL.F_AMT) 
- CONVERT(numeric(18, 2), SMP_APDTL.F_UNITAMT * SMP_APDTL.F_DOCQTY) AS F_SUBAMT, 
T_ITEMTRANSHDR.F_TRANSDATE, T_SALESORDDTL.F_ITEMCUSTDESC, T_SALESORDHDR.F_CUSTORDID,  
T_ITEMADJTYPE.F_DESC AS ADJDESC,T_ITEMADJTYPE.F_TRANSTYPE, T_ARDTL.F_ARID,  
SMP_PMPC_PMPCAP_Resource.F_Target_AP_CreateResult as F_APResult,
SMP_PMPC_BPAR_Resource.F_Source_AR_CreateResult as F_ARResult
 FROM T_SALESORDHDR 
INNER JOIN T_SALESORDDTL ON T_SALESORDHDR.F_ID = T_SALESORDDTL.F_SALESID 
INNER JOIN T_ITEM INNER JOIN SMP_APDTL ON T_ITEM.F_ID = SMP_APDTL.F_ITEMID 
INNER JOIN T_ITEMTRANSHDR ON SMP_APDTL.F_TRANSID = T_ITEMTRANSHDR.F_ID 
INNER JOIN T_ITEMTRANSDTL ON SMP_APDTL.F_TRANSDTLID = T_ITEMTRANSDTL.F_ID 
INNER JOIN T_ITEMADJTYPE ON T_ITEMTRANSDTL.F_ADJTYPE = T_ITEMADJTYPE.F_ID
ON T_SALESORDDTL.F_ITEMID = T_ITEMTRANSDTL.F_ITEMID AND T_SALESORDDTL.F_SALESID = T_ITEMTRANSDTL.F_SALESID 
INNER JOIN T_ITEMTRANSTYPE ON T_ITEMTRANSHDR.F_TRANSTYPE = T_ITEMTRANSTYPE.F_ID 
LEFT OUTER JOIN 
 (
T_ARDTL INNER JOIN T_ARHDR ON T_ARHDR.F_ID=T_ARDTL.F_ARID INNER JOIN T_INVOTYPE ON T_INVOTYPE.F_ID=T_ARHDR.F_INVOTYPE
AND T_INVOTYPE.F_ID = T_INVOTYPE.f_hedgeid) ON SMP_APDTL.F_ID = T_ARDTL.F_SMPID  
left join SMP_PMPC_PMPCAP_Resource on SMP_PMPC_PMPCAP_Resource.F_BillDtlID = SMP_APDTL.F_ID 
left join SMP_PMPC_BPAR_Resource on SMP_PMPC_BPAR_Resource.F_BillDtlID = SMP_APDTL.F_ID 
WHERE (SMP_APDTL.F_APID = 3116) AND (T_ITEMTRANSTYPE.F_ISINNERBOARD = 0) 
UNION ALL  
SELECT T_ITEM.F_DESC, T_ITEM.F_UNIT, SMP_APDTL.F_ID, SMP_APDTL.F_ITEMID, SMP_APDTL.F_DOCQTY, SMP_APDTL.F_TRANSID, 
CONVERT(numeric(18,4), SMP_APDTL.F_NEWUNITAMT) AS F_NEWUNITAMT,  
CONVERT(numeric(18, 6), SMP_APDTL.F_AMT / SMP_APDTL.F_DOCQTY) AS F_UNITAMT, CONVERT(numeric(18, 2), SMP_APDTL.F_AMT) AS F_AMT,
CONVERT(numeric(18, 2), SMP_APDTL.F_AMT / 1.17 * 0.17) AS F_TAXAMT, CONVERT(numeric(18, 2), SMP_APDTL.F_UNITAMT) AS F_FUNITAMT, 
CONVERT(numeric(18, 2), SMP_APDTL.F_UNITAMT * SMP_APDTL.F_DOCQTY) AS F_FAMT, 
CONVERT(numeric(18, 2), SMP_APDTL.F_AMT) - CONVERT(numeric(18, 2), SMP_APDTL.F_UNITAMT * SMP_APDTL.F_DOCQTY) AS F_SUBAMT, 
T_ITEMTRANSHDR.F_TRANSDATE, T_ITEM.F_DESC AS F_ITEMCUSTDESC, '' AS F_CUSTORDID, T_ITEMADJTYPE.F_DESC AS ADJDESC,
T_ITEMADJTYPE.F_TRANSTYPE, T_ARDTL.F_ARID , SMP_PMPC_PMPCAP_Resource.F_Target_AP_CreateResult as F_APResult,
SMP_PMPC_BPAR_Resource.F_Source_AR_CreateResult as F_ARResult FROM T_ITEMTRANSTYPE 
INNER JOIN T_ITEM INNER JOIN SMP_APDTL ON T_ITEM.F_ID = SMP_APDTL.F_ITEMID 
INNER JOIN T_ITEMTRANSHDR ON SMP_APDTL.F_TRANSID = T_ITEMTRANSHDR.F_ID 
INNER JOIN T_ITEMTRANSDTL ON SMP_APDTL.F_TRANSDTLID = T_ITEMTRANSDTL.F_ID 
INNER JOIN T_ITEMADJTYPE ON T_ITEMTRANSDTL.F_ADJTYPE = T_ITEMADJTYPE.F_ID ON  
T_ITEMTRANSTYPE.F_ID = T_ITEMTRANSHDR.F_TRANSTYPE LEFT OUTER JOIN (T_ARDTL 
INNER JOIN T_ARHDR ON T_ARHDR.F_ID=T_ARDTL.F_ARID INNER JOIN T_INVOTYPE ON T_INVOTYPE.F_ID=T_ARHDR.F_INVOTYPE
AND T_INVOTYPE.F_ID = T_INVOTYPE.f_hedgeid) ON SMP_APDTL.F_ID = T_ARDTL.F_SMPID  
left join SMP_PMPC_PMPCAP_Resource on SMP_PMPC_PMPCAP_Resource.F_BillDtlID = SMP_APDTL.F_ID  


left join SMP_PMPC_BPAR_Resource on SMP_PMPC_BPAR_Resource.F_BillDtlID = SMP_APDTL.F_ID  
and SMP_PMPC_BPAR_Resource.F_ICID = dbo.getbpid() 
WHERE (SMP_APDTL.F_APID = 3116) AND (T_ITEMTRANSTYPE.F_ISINNERBOARD = 1)

[解决办法]
太长了,分布来搞吧, 用用临时表 建建索引
[解决办法]
光看你代码太累,请:

SQL code
建议你提供详细的资料:例如表的结构,表之间的关系,测试数据,相关算法及需要的结果。这样有助于我们理解你的意思,更主要的是能尽快让你获得答案或解决问题的方法。
[解决办法]
探讨
sql语句有点长,当数据很多的时候查询很影响速度,请问这个语句可以怎么优化呢?

SELECT T_ITEM.F_DESC, T_ITEM.F_UNIT, SMP_APDTL.F_ID, SMP_APDTL.F_ITEMID, SMP_APDTL.F_DOCQTY, SMP_APDTL.F_TRANSID,
CONVERT(numeric(18,4), SMP_APDTL.F_NEWUNI……

[解决办法]
探讨

先谢谢大家了,本人sql菜鸟,不知优化一个sql从何下手,索引和临时表也很少用过,请问有没具体的例子供学习学习

热点排行