SQL索引查询 - 我应该添加索引

时间:2017-05-05 09:21:13

标签: sql-server tsql

我有一个查询需要针对遗留数据库中不正确关系的表运行(因为它是软件公司的想法),并且没有主键等。

我遇到的问题是需要从多个表中返回特定数据,但这些表的大小非常大,查询可以根据用户需求进行更改。

从应用程序调用此查询并返回数据集以供.NET应用程序使用。

查询

SELECT  pro.Name , pro.Pcode , pro.Addr1 , pol.B@ , pol.PolRef@ , ec.Aggregator , 
CASE WHEN ec.Notes1 = 'Click Purchase' THEN 'BOL' WHEN ec.Notes1 = 'Click' THEN 'Click' ELSE 'TopX' END 'Type' , 
pol.Create_date 'Date' , REVERSE(STUFF(REVERSE(pol.Create_time), 3, 0, ':')) 'Time' , 
pol.Premium, 
ben.[Delphi ID Score], 
ben.[Delphi Score 1 - 90CON] 
FROM    dbo.ic_Daprospect pro 
INNER JOIN dbo.ic_Dapolicy pol ON pol.B@ = pro.B@ AND pol.Ref@ = pro.Ref@ 
INNER JOIN dbo.ic_DP_EC ec ON ec.B@ = pol.B@ AND ec.PolRef@ = pol.PolRef@ 
LEFT OUTER JOIN dbo.v_FIG_BEN ben ON ben.B@ = pol.B@ AND ben.PolRef@ = pol.PolRef@ 
WHERE   dbo.RemoveSpaces(pro.Pcode) = '" & sPostcode.Replace(" ", "") & "' 
AND SUBSTRING(pol.Ref@, 1, 4) <> 'POMS' 
AND pol.B@ IN (" & sBranch & ") 
AND pol.Create_date >= dbo.Today() - " & sDayRange & ""

由于邮政编码可以输入两个空格,或者没有我有一个删除WHERE语句空格的函数,并且随后依赖于它们在应用程序中键入的内容,也会删除空格。

'sBranch'变量只是一个0或1或3或0,1,3的varchar。

创建日期基本上是dbo.Today,它在今天的日期没有当前时间,然后只使用减去x天数,他们从应用程序中的天数中选择。

问题

查找本身用于客户端需要速度的环境中(如果可以,它应该总是很快)。它可能需要15秒到40秒的时间,这是FAR太长了。

由于此数据库的设置,B @和PolRef @上只存在唯一的索引,为了加快此查询,我最好将INDEX应用于我在'Postcode','Ref @'上搜索的4列, 'B @','Create_Date'?

我知道这是一个非常开放的问题,但只需要一些指导,如果需要进行更多的查询优化,请告诉我。

0 个答案:

没有答案