Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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 包含空白表中的列_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

Sql 包含空白表中的列

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

我有一个简单的Sql,外部连接连接8个表,其中表6为空。
通过 任何表上都没有索引。如果任何表上都没有索引,那么为什么该表的列会导致查询时间大幅增加?
只要我包含表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足够智能,不会进行联接。您的效率低下可能是由于缺少索引。原因是执行计划发生了变化。我不确定这些更改是什么,但要么以不同的顺序进行连接,要么从散列连接切换到嵌套循环连接,这两个可能是罪魁祸首。