2013-05-29 39 views
0

我只是想知道做多重選擇與使用單一選擇之間的區別是什麼有什麼性能增益?我看到有人這樣做了,我覺得它有點像在下面那樣失控;多重選擇與單一選擇聲明

select @a = cBranchName from mstores where nBranchCode = 1 
select @b = cBranchAddress from mstores where nBranchCode = 1 
select @c = dCreateDate from mstores where nBranchCode = 1 
select @d = AssignedCompanyId from mstores where nBranchCode = 1 
select @e = StoreFormat from mstores where nBranchCode = 1 

select @a = cBranchName 
    ,@b = cBranchAddress 
    ,@c = dCreateDate 
    ,@d = AssignedCompanyId 
    ,@e = StoreFormat from mstores where nBranchCode = 1 

我還假定在5選擇的使5趟數據庫,我怎麼能證明一個SELECT語句比5個select語句更快,

即使只是看着它,我已經認爲單個select語句比多個選擇語句快得多。

+1

讀書五次更快或讀一本書的時間更快? – SenthilPrabhu

+0

@SenthilPrabhu:並不那麼簡單。數據庫經常優化您的查詢,但我不認爲在這種情況下。 –

+0

@TimSchmelter:數據庫需要優化可能需要至少一秒鐘的查詢。 – SenthilPrabhu

回答

0

爲一個表,我認爲單一的選擇應該是數字1選擇#,當你正在處理多個表甚至再視情況單獨的連接語句是更好的那麼多個SELECT語句

我認爲一個單獨的語句使數據庫能夠進行很多優化,因爲它可以查看所有需要掃描的表,減少開銷,並且可以在本地生成結果集。而且對於下一個程序員來說,單個語句通常更容易理解和修改

0

最簡單的方法是測試它來證明它,但我希望在單個表上選擇一個將比5更便宜。對於多個選項卡在需要連接的情況下,執行單個選擇可能會更便宜 - 您需要使用「解釋計劃」來提前確定(有時連接不能/不使用索引,而單個表選擇將)。

http://msdn.microsoft.com/en-us/library/ms190287.aspx

SET STATISTICS TIME ON; 
GO 
SELECT ProductID, StartDate, EndDate, StandardCost 
FROM Production.ProductCostHistory 
WHERE StandardCost < 500.00; 
GO 
SET STATISTICS TIME OFF; 
GO 

結果:

SQL Server parse and compile time: 
CPU time = 0 ms, elapsed time = 1 ms. 

(269 row(s) affected) 

SQL Server Execution Times: 
CPU time = 0 ms, elapsed time = 2 ms. 
SQL Server parse and compile time: 
CPU time = 0 ms, elapsed time = 1 ms. 
1

我不希望看到2種方法之間的差異顯著。在方法#1中執行第一個SELECT之後,執行計劃將存在,數據庫引擎可以重新使用其他4個SELECT。並且:頁面可能會被緩存在這個位置,所以不需要返回到磁盤。方法#2在2個計數中更爲理想:它(可爭辯地)更優雅,其次是單個命令,因此該行在執行時將被鎖定。在方法#1這是可能的,該行將每個SELECT

+0

垃圾。當然是有區別的。即使該頁面被緩存,也有往返行程。該行在執行過程中不會被鎖定,但您確實提到了在兩個語句之間進行更改的可能性,因此您可以在該語句上進行折算。 – LoztInSpace

+0

共享讀鎖定將存在。我說我不希望看到顯着差異,因此,當然是有差別的 –

1

主要區別之間切換:

  1. 五往返,而不是一個。光/電的速度照顧這一個
  2. 必須檢查,解析和執行5個語句不是一個。你認爲什麼會更快?
  3. 一致性 - 如果在選擇之間發生更新會發生什麼?
  4. 你可以很清楚地看到,那張如果你表現出的執行計劃

我很茫然很明白爲什麼有人會永遠有理由認爲5個查詢會比一個更好的工作。