我正在尝试在SQL Server中运行以下查询,但它需要大约1小时才能运行。表' dbo.AccessControl'有大约300万条记录和' dbo.username'表有3.5k记录。有没有办法优化这个查询,因为我不认为单个左连接应该花费这么多时间只有300万条记录。
select isd.*,ac.username1+','+ac.Username2+','+ac.Username3 as UserName
into dbo.username
from dbo.details isd
left outer join dbo.AccessControl ac
on isd.LocationId=ac.LocationId
and isd.DepartmentId=ac.DepartmentId
and isd.productId=ac.productId;
答案 0 :(得分:0)
有没有办法优化这个查询,因为我不认为单个左连接应该花费这么多时间只有300万条记录。
在你的情况下,我认为可能存在某种锁定,阻塞导致此查询运行这么长时间,或者你可能不得不遇到某种瓶颈..
要找出,为什么你的查询运行这么多时间...在一个单独的窗口中运行以下查询(你也可以使用Activity监视器来显示它)
select status,command,blocking_session_id,wait_type,last_Wait_type
from sys.dm_exec_requests where session_id=<<select into sessionid>>
这应该能给你一些关于发生什么的线索..
如果您使用的是版本&gt; SQL2014,您可以按照以下步骤
了解查询的实时状态 Set statistics profile on
your query
然后在单独的窗口中运行以下查询
select * from sys.dm_exec_query_profiles
where session_id=your session id