增加一个int字段竟然让整个SQL语句的执行时间翻了几倍
本帖最后由 robake 于 2013-01-16 14:09:36 编辑 数据库:SQL2008
有下边的SQL语句:
select a.VirusNameID1,a.DateTime ,b.Name,d.ID as SpywareExclusionId,
0 as t--,VirusTypeID
FROM VSDetections.dbo.VS_Detections365 a
Left join VSDetections.dbo.VS_VirusNames b ON b.Id=a.VirusNameID1
Left join VirusScanProd.dbo.MyCIOVirusName d ON d.VirusName=b.Name
Where MID =ANY
(Select ID From VirusScanProd.dbo.MyCIOMachine
Where ContactID=46)
--and VirusTypeID =ANY (Select VirusTypeID from VSDetections.dbo.MyCIOVirusTypeLookup
Where Category=2)
--and VirusTypeID>=20207
目前的SQL语句在查询分析器中执行的时间非常快,可以忽略为0,但若加上显示字段VirusTypeID后或是起用条件and VirusTypeID =ANY (Select VirusTypeID from VSDetections.dbo.MyCIOVirusTypeLookup Where Category=2),整个执行时间竟然达到了15秒。
看了下数据库结构,VirusTypeID没有建索引,是int字段。
请教高手,怎样调整SQL语句,才能使性能不至于太差。
PS:VSDetections.dbo.VS_Detections365这张表里共有270万行记录。 sql 数据库
[解决办法]
2008的执行计划应该会有一个missing index(英文版)/丢失索引 这个绿色的字,先按照它的建议加上试试