Sql 包含空白表中的列
我有一个简单的Sql,外部连接连接8个表,其中表6为空。Sql 包含空白表中的列,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我有一个简单的Sql,外部连接连接8个表,其中表6为空。 通过 任何表上都没有索引。如果任何表上都没有索引,那么为什么该表的列会导致查询时间大幅增加? 只要我包含表6中的列(空白表/无行),查询执行时间就会从2秒跳到28秒。 然而,通过从select中排除table6列,仍然保持表6的外部连接,执行时间仍然保持在2/3秒。 原因可能是什么? 通过空表,我的意思是空白表更新了主题以反映相同的内容 SELECT u.UserID,u.LastName, CAST(t1.Hours
通过 任何表上都没有索引。如果任何表上都没有索引,那么为什么该表的列会导致查询时间大幅增加?
只要我包含表6中的列(空白表/无行),查询执行时间就会从2秒跳到28秒。
然而,通过从select中排除table6列,仍然保持表6的外部连接,执行时间仍然保持在2/3秒。
原因可能是什么?
通过空表,我的意思是空白表更新了主题以反映相同的内容
SELECT u.UserID,u.LastName,
CAST(t1.Hours as Int) as t1Hours
,CAST(t2.Hours as Int) as t2Hours
,CAST(t3.Hours_as Int) as t3Hours
,CAST(t4.Hours as Int) as t4Hours
,CAST(t5.Hours as Int) as t5Hours
,CAST(t6.Hours as Int) as t6Hours
,a.CYear
FROM Users u
LEFT OUTER JOIN table1 t1 ON u.UserID = t1.UserID
LEFT OUTER JOIN table2 t2 ON u.UserID = t2.UserID
LEFT OUTER JOIN table3 t3 ON u.UserID = t3.UserID
LEFT OUTER JOIN table4 t4 ON u.UserID = t4.UserID
LEFT OUTER JOIN table5 t5 ON u.UserID = t5.UserID
LEFT OUTER JOIN table6 t6 ON u.UserID = t6.UserID
LEFT OUTER JOIN A a ON u.UserID = a.Login
WHERE u.DepID = 1 and u.RoleID=1
Order By a.CYear desc , u.LastName asc
谢谢。
原因是什么?
任何表上都没有索引。
另外,你能澄清一下“空表”是什么意思吗?看看查询计划,如果这不能解决问题,请在这里发布前后计划。为什么没有索引?无论是否有联接,如果查询不需要使用它(例如,不使用SELECT、ORDER BY、WHERE或其他联接等。依赖它),那么SQL Server足够智能,不会进行联接。您的效率低下可能是由于缺少索引。原因是执行计划发生了变化。我不确定这些更改是什么,但要么以不同的顺序进行连接,要么从散列连接切换到嵌套循环连接,这两个可能是罪魁祸首。