我有一个永远不会完成执行的存储过程。尽管该表已编制索引,但即使是80,000条记录也无法使用。我尝试使用Adam Machanic脚本,发现以下语句永远不会终止。我知道问题出在where子句之后的某个地方。
P.S。参数嗅探并非如此。
insert into ProcessedFile_396 (Name,Phone,Title,Address,company,domain,SIC,NAICS,Industry,Email,UploadedB2bFiled_id) select
b.Name,
b.Phone,
b.Title,
case when isnull(b.Street,'') <> '' then isnull(b.Street,'') +',' else '' end +
case when isnull(b.city,'') <> '' then isnull(b.city,'') + ',' else '' end +
case when isnull(b.state,'') <> '' then isnull(b.state,'') + ',' else '' end +
case when isnull(b.zip,'') <> '' then isnull(b.zip,'') + '.' else '' end as Address,
(select top 1 Company from CompanyWebsite where domain = b.domain) as Company,
b.domain,
b.SIC,
b.NAICS,
b.Industry,
b.Email,
B2bFiled_id
from
UploadedFile_396 a, B2bDB b
where
((a.CompanyDomain = b.domain and ISNULL(a.CompanyDomain,'') <> ''))
and
((a.Name = b.Name or a.FirstName = b.FirstName or a.LastName = b.LastName or a.MiddleName = b.MiddleName)
and
(ISNULL(a.Name,'') <> '' or ISNULL(a.FirstName,'') <> '' or ISNULL(a.LastName,'') <> '' or ISNULL(a.MiddleName,'') <> '' ))
group by
B2bFiled_id,b.Name,b.Phone,b.Title,b.Street,b.City,b.State,b.Zip,b.domain,b.domain,b.SIC,b.NAICS,b.Industry,b.Email
答案 0 :(得分:2)
我能想到两件事。首先,SQL Server可能正在对查询进行次优优化。然而,它并不复杂,所以这可能不是原因。
更可能的原因是域名的加入。我的猜测是你有一个拥有数千或数万个例子的域名。在连接中,这会产生数百万(或数十亿)候选行,这可以解释性能不佳。空白是一个明显的候选人,但你消除了空白。
在联接中执行“或”操作可能会有问题。尝试在其中一个字段(例如Name)上运行带有匹配项的查询,以查看是否在有限的时间内返回。如果是这样,一个解决方案是将查询分解为四个,并将它们组合在一起。