2016-08-28 81 views
0
UPDATE User 
SET Name = (SELECT NameSpace.NameId 
      FROM NameSpace 
      WHERE NameSpace.Name = 'BlaBlaBla') 
WHERE UserId = 1453 

这是更快或该查询运行SQL Server的更快

int Value = Select NameSpace.NameId from NameSpace 
      where NameSpace.Name = 'BlaBlaBla'; 

UPDATE User 
SET Name = "+Value +" 
WHERE UserId = 1453 

Select 
    UserName, 
    UserAge, 
    (Select * from AdressesTable where Adresses.AdresID=User.AdresID) 
from 
    UserTable 
where 
    UserId='123' 

OR

Select * 
from AdressesTable, UserTable 
where Adresses.AdresID = User.AdresID AND UserID = '123' 
+1

一个查询比2个单独的查询更快。通常,联接比子查询更好。 –

+2

你为什么不计时? – Shadow

+0

@Shadow我要去计时,但我没有大部分的价值。我看不到任何东西。我没有任何数据可供尝试。 –

回答

1

有多种假设是决定做这是更快。

首先,如果您关心速度,那么您需要users(userid)namespace(name)上的索引。

二,分配查询应该是这样的SQL Server:

declare @Value int; 

select @Value = NameSpace.NameId 
from NameSpace 
where NameSpace.Name = 'BlaBlaBla'; 

你的变量声明和子查询不为SQL Server正确。

最后,即使一切设置正确,也不可能说哪个更快。如果我假设UserId只有一个匹配记录,那么单个update可能会更快 - 尽管可能很少,以至于不明显。它可能不会更快。此更新可能会导致在NameSpace上执行某种锁定,否则将不会采取这种锁定。我实际上预计这两者在速度上会相当。

但是,如果许多用户具有相同的userid(这不太可能给出列的名称),那么您正在对多行进行更新。一次存储计算结果并使用它可能比多次运行子查询要好。即便如此,通过正确的索引,我预计性能差异可以忽略不计。

+0

嗯,我认为JOİN比所有这些都快。如果我使用Join,SQL服务器可以更快地回答我。对 ? –

+0

@MuhammedAlmaz。 。 。我不认为你读了答案。您需要适当的索引以获得更好的性能在某些情况下,变量可能会稍快一些。 –