如何提高SQLServer2008R2中求和聚合函数的性能

如何提高SQLServer2008R2中求和聚合函数的性能,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,我们正在进行SQL查询以提高性能。疑问是 SELECT SUM(p.fDebitAmount), SUM(p.fCreditAmount) FROM tSCCompany c LEFT JOIN tGLPostSummary p ON (c.fCompanyID = p.fCompanyID AND p.fAccount = c.fEnterpriseAccount AND p.fPostDate <= '2014-08-19 21:51:56'

我们正在进行SQL查询以提高性能。疑问是

SELECT 
    SUM(p.fDebitAmount),
    SUM(p.fCreditAmount)
FROM 
    tSCCompany c
LEFT JOIN  
    tGLPostSummary   p ON (c.fCompanyID = p.fCompanyID AND p.fAccount = c.fEnterpriseAccount AND p.fPostDate <= '2014-08-19 21:51:56')  
INNER JOIN 
    tSCLedgerAccount l ON (c.fCompanyID = l.fCompanyID AND c.fEnterpriseAccount = l.fAccount)  
WHERE 
    c.fEnterpriseID = '4FD5CB57-C04E-11D2-8C59-00A02492E6F3'  
    AND c.fCompanyID = 'A1F266BA-FC99-11D2-B221-0008C7B1BE09' 
    AND c.fEnterpriseAccount = '202'
    AND c.fCurrencyID = '1'
以上查询需要6秒。执行

请参考所附图片以了解更多说明

有没有办法减少这些时间来提高查询性能

我们尝试使用带over的SUM函数,但它给出了异常,如按语法错误排序


我们在数据库上正确地使用了索引。实际上,数据库存在于客户端,它是Handel我的客户端。因此,所有与数据库模式或结构相关的任务都由客户机完成。我们没有更新数据库设计的权限。请在查询级别向我建议如何提高性能。

请尝试以下方法:

SELECT 
    SUM(p.fDebitAmount),
    SUM(p.fCreditAmount)
FROM tSCCompany c
INNER JOIN tSCLedgerAccount l ON (c.fCompanyID = l.fCompanyID AND c.fEnterpriseAccount =l.fAccount)  
LEFT JOIN  
    tGLPostSummary   p ON (c.fCompanyID = p.fCompanyID AND p.fAccount =      c.fEnterpriseAccount )  
WHERE 
c.fEnterpriseID = '4FD5CB57-C04E-11D2-8C59-00A02492E6F3'  
AND c.fCompanyID = 'A1F266BA-FC99-11D2-B221-0008C7B1BE09' 
AND c.fEnterpriseAccount = '202'
AND c.fCurrencyID = '1' AND Convert(char,p.fPostDate,109) <= Convert(Char,Convert(datetime,'2014-08-19 21:51:56'),109)

在join语句和where子句中的所有字段上都有索引吗?查询计划显示了什么?统计数字是最新的吗?索引是否按预期使用?请在查询级别向我建议如何提高性能?tGLPostSummary中的fPostDate是什么数据类型?加入Tslegraccount“l”的目的是什么?我在c列上看到了where子句,这些子句对联接中使用的字段进行过滤,但它们都可以在“c”表中引用。应该能够完全删除该连接。