Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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,我执行了一个查询,发现如果我独立执行内部查询,执行所需的时间会更长 我的问题是 select distinct SUBSTRING(UserUri,CHARINDEX('@',UserUri)+1,LEN(UserUri)) as Company FROM [DWH].[dbo].[UsersDetails] where UserUri not like '%@mycompany.com%' and UserId in ( select distinct U

我执行了一个查询,发现如果我独立执行内部查询,执行所需的时间会更长

我的问题是

select distinct 
   SUBSTRING(UserUri,CHARINDEX('@',UserUri)+1,LEN(UserUri)) as Company
FROM 
   [DWH].[dbo].[UsersDetails]
where 
   UserUri not like '%@mycompany.com%'
   and UserId in (
    select distinct UserId from UsersInfo
    )
   and ISNUMERIC(SUBSTRING(UserUri,CHARINDEX('@',UserUri)+1,LEN(UserUri)))!= 1
整个查询运行时间为18-20秒。但当执行内部查询时,即从用户中独立选择不同的UserId,需要40-50秒


我的疑问是,如果内部查询需要40-50秒,那么外部查询应该只在40-50秒之后结束。

这是因为创建执行计划时,不一定要执行整个内部查询,只需要检查UserId是否在UsersInfo中,通过索引进行seek很可能实现这一点——我的建议是比较两种情况下的查询执行计划,您甚至不应该在select中使用UserId。。。Sql不能像C或其他语言那样工作。它可以在内部选择中使用循环,也可以不使用循环。它只能在索引中找到一个值,而不是观察所有值来区分它们。当第一个匹配项被找到时,它几乎打破了循环。我猜查询引擎足够聪明,在签入时不会使用distinct。如果它在distinct中,那么它也将在中,并且distinct检查在大型表上可能需要很长时间,具体取决于索引@Andrew有很好的建议…检查查询计划。感谢您的回复,执行计划帮助我理解了事情。但是如果我不需要设置索引,还有其他方法可以临时创建这样的查询吗?那是因为当创建执行计划时,不一定要执行整个内部查询,只需要检查UserId是否在UsersInfo中,通过索引进行seek很可能实现这一点——我的建议是比较两种情况下的查询执行计划,您甚至不应该在select中使用UserId。。。Sql不能像C或其他语言那样工作。它可以在内部选择中使用循环,也可以不使用循环。它只能在索引中找到一个值,而不是观察所有值来区分它们。当第一个匹配项被找到时,它几乎打破了循环。我猜查询引擎足够聪明,在签入时不会使用distinct。如果它在distinct中,那么它也将在中,并且distinct检查在大型表上可能需要很长时间,具体取决于索引@Andrew有很好的建议…检查查询计划。感谢您的回复,执行计划帮助我理解了事情。但是,如果我不必放置索引,是否还有其他方法可以临时生成此类查询。