2016-08-28 82 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。 。 。我不認爲你讀了答案。您需要適當的索引以獲得更好的性能在某些情況下,變量可能會稍快一些。 –