【发布时间】:2017-02-06 07:26:13
【问题描述】:
我正在尝试在 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;
【问题讨论】:
-
尝试与(一个或多个(即三个))反连接联合的内部连接。我见过很多例子,内连接立即完成,而左连接需要 ~forever。
-
请发布执行计划。您在连接列上有索引吗?它们被使用了吗?计划中的估计行数是多少?毕竟,您的查询可能会导致 3M * 3.5 行。 为什么您要尝试使用所有这些数据创建一个新表?
-
您是否在查询执行时检查了活动监视器?这将显示是否有任何锁定或 IO 问题,甚至显示查询的执行计划
-
请发布执行计划。这是唯一会显示的内容,例如,如果使用索引或使用 tempdb,因为没有足够的索引
标签: sql-server