2012-08-22 118 views
-1

我一直在尋找在SQL Server的一些提示和技巧查詢Opitimization 2008查詢優化技巧

我來到了防空火炮低於我不是很確定是什麼使用視圖/ triggies的後果

  • 嘗試更換與原始源表視圖
  • 觸發器不應該被儘可能使用,結合觸發的邏輯在存儲 過程

有人可以闡明這些解釋優點和缺點,也可以指出我的查詢優化的一般提示和技巧列表。

+0

我的問題不明智嗎?還是那個投下的選手是如此天才,以至於他不明白在問什麼?至少在投票時發表評論;所以其他人可以理解你最新是什麼,或者在問題 – Sreedhar

+2

中有什麼問題。或許他們覺得你的問題根據[StackOverflow FAQ](http://stackoverflow.com/faq#questions)是不恰當的。這不是一個具體問題,而是一個開放式討論的邀請。無論如何,我沒有以任何方式投票。 – HABO

回答

0

視圖是由查詢形成的虛擬表,例如'SELECT a,b FROM tableC'這創建了一個& b的'虛擬表'。源表是其自身的表,並且能夠'SELECT * FROM tableC'以便不創建虛擬表的能力高得多。

觸發器是在發生指定事件(例如特定查詢)時觸發的事件。存儲過程是編譯的事務,並且可以像觸發器一樣運行,除非它們效率更高。總之,不要使用觸發器。

我會認真考慮這個http://www.amazon.com/SQL-Tuning-Dan-Tow/dp/0596005733/ref=sr_1_1?ie=UTF8&qid=1345679033&sr=8-1&keywords=sql+optimization

+0

對於虛擬表答案。數據庫設計應該是這樣的:查詢通常需要從返回的每一行的給定源列返回的所有信息。因此,如果您有一個查詢只從表格中選擇某些列,那麼您的模式效率不高。 – David

+0

我不同意視圖是「虛擬表」。但@大衛我不確定我遵循你的邏輯。因此,如果我有一個OrderDetails表,並且使用查詢來獲取尚未發貨的訂單所需的產品x單位總數,則我的模式是垃圾,因爲我的查詢沒有查看單價欄,這與我目前正在運行的查詢無關? –

+0

你會使用'SELECT COUNT(unit)FROM OrderDetails'這樣的查詢,並且由於count沒有僅返回一個「行列表」,所以沒有創建虛表,所以不,你的模式是在這種情況下不是垃圾。如果您正在運行'SELECT unit FROM OrderDetails',然後使用其他函數進行計數,那麼您正在創建一個虛擬表,並且效率不高。 – David