Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 慢左外接_Sql Server - Fatal编程技术网

Sql server 慢左外接

Sql server 慢左外接,sql-server,Sql Server,我想知道是否有人能在这个问题上给我建议。我有一个查询,当引入左外部联接时,它运行得很慢。如果没有左外连接(改为内连接),它几乎可以立即运行,但是使用左外连接,它可以运行20秒或更长时间。连接的列将被索引。如果有帮助,我的执行计划会显示一个哈希匹配。再次感谢您的帮助 德里克 这将使其更具可读性和更快,问题在于您在WHERE子句中比较日期的方式: SELECT --(do you really need distinct ?) Staff.strStaffName AS [Staff Name]

我想知道是否有人能在这个问题上给我建议。我有一个查询,当引入左外部联接时,它运行得很慢。如果没有左外连接(改为内连接),它几乎可以立即运行,但是使用左外连接,它可以运行20秒或更长时间。连接的列将被索引。如果有帮助,我的执行计划会显示一个哈希匹配。再次感谢您的帮助

德里克


这将使其更具可读性和更快,问题在于您在WHERE子句中比较日期的方式:

SELECT --(do you really need distinct ?)
  Staff.strStaffName AS [Staff Name],
  Staff.strEmailAddress1 AS NegEmailAddress, 
  ISNULL(con.qryContactEmailDJ.Address, Staff.strEmailAddress1) AS AppEmailAddress
FROM dbo.Contacts
JOIN dbo.Staff
ON Contacts.strResponsibilityOf = Staff.strStaffName
LEFT JOIN dbo.qryContactEmailDJ con
ON Contacts.ContactPK = con.ContactFK
JOIN dbo.Property
ON Contacts.CompanyFK = Property.CompanyFK
JOIN dbo.qryLS_ApplicantLastMadeActive qryl
ON Contacts.ContactPK = qryl.ContactPK
WHERE
  (Contacts.strApplicantStatus = 'Active') 
  AND qryl.LatestActiveDate >= dateadd(d, datediff(d, 0, GETDATE()), -84)
  AND qryl.LatestActiveDate < dateadd(d, datediff(d, 0, GETDATE()), -83)
选择--(您真的需要区分吗?)
Staff.strStaffName作为[员工姓名],
Staff.strEmailAddress1作为NegEmailAddress,
ISNULL(con.qryContactEmailDJ.Address,Staff.strEmailAddress1)作为AppEmailAddress
来自dbo.Contacts
加入dbo.Staff
在Contacts.strResponsibilityOf=Staff.strStaffName上
左JOIN dbo.qryContactEmailDJ con
在Contacts.ContactPK=con.ContactFK上
JOIN dbo.Property
在Contacts.CompanyFK=Property.CompanyFK上
加入dbo.qryLS\u应用程序LastmadeActive qryl
ON Contacts.ContactPK=qryl.ContactPK
哪里
(Contacts.strApplicantStatus='Active')
和qryl.LatestActiveDate>=dateadd(d,datediff(d,0,GETDATE()),-84)
和qryl.LatestActiveDate
请给出完整的执行计划(查询的两个版本)什么是
lateStativeDate
数据类型,以及为什么要将日期转换为字符串?这阻止了索引的使用?为什么在这里使用distinct?哪些表会导致重复记录?嗨,MatBailie,当我删除qryLS\U应用程序LastMadeActive时,实际上没有什么区别,所以我想我应该为此保留它。我将删除它,并查看执行计划是否会发生变化。dbo.qryContactEmailDJ是否有重复的@sanatsathyanSuper。。谢谢你,我已经记下了你的约会标准。比转换看起来要快。需要使用distinct,但(这不是我的问题)我可以重写此minster以不使用distinct。案件陈述也在减缓事态的发展。。谢谢你的评论和帮助。。
SELECT --(do you really need distinct ?)
  Staff.strStaffName AS [Staff Name],
  Staff.strEmailAddress1 AS NegEmailAddress, 
  ISNULL(con.qryContactEmailDJ.Address, Staff.strEmailAddress1) AS AppEmailAddress
FROM dbo.Contacts
JOIN dbo.Staff
ON Contacts.strResponsibilityOf = Staff.strStaffName
LEFT JOIN dbo.qryContactEmailDJ con
ON Contacts.ContactPK = con.ContactFK
JOIN dbo.Property
ON Contacts.CompanyFK = Property.CompanyFK
JOIN dbo.qryLS_ApplicantLastMadeActive qryl
ON Contacts.ContactPK = qryl.ContactPK
WHERE
  (Contacts.strApplicantStatus = 'Active') 
  AND qryl.LatestActiveDate >= dateadd(d, datediff(d, 0, GETDATE()), -84)
  AND qryl.LatestActiveDate < dateadd(d, datediff(d, 0, GETDATE()), -83)