2010-03-14 218 views
2

我想了解使用SQL Server 2005的SQL查詢優化。但是,我沒有找到任何實際的例子,我可以通過單獨調整查詢來提高性能。你能列舉一些示例查詢 - 優化之前和之後?查詢優化

它必須是查詢調優 - 不添加索引,不覆蓋索引,不對錶進行任何更改。在表和索引上應該沒有改變。 [我明白指標很重要。這只是用於學習目的]

如果你可以使用臨時表來解釋,而不是像冒險工作室那樣引用任何示例數據庫,那將是非常好的。

+0

查詢優化不能孤立並沒有考慮到指標進行;除了顯然沒有做一個SELECT'*',或者使用IF EXISTS而不是SELECT COUNT('*')(由於評論解釋一個星號的方式引起的單引號) – 2010-03-14 06:35:13

+0

我正在精確地查找'IF EXISTS'之類的東西。你能列出那些明顯的東西嗎? – Lijo 2010-03-14 06:54:58

回答

1

1)在SELECT,UPDATE和DELETE中儘可能多地使用JOIN。有時候人們通過記錄(或使用遊標)來循環更新,從表中刪除記錄,但幾乎總是可以通過JOIN表來實現相同的功能,並且會大大提高性能。示例here。 2)你不需要使用臨時表,除非你得到一些記錄並對其執行一些中間操作並返回結果。爲此,無論如何你應該使用Table variables。 3)如果你不想使用臨時表爲上述原因,因爲你不需要中間更新等,但你仍然想使用結果集進一步連接,請嘗試使用CTE (Common table expressions)。我知道它可能與性能無關,但對派生表非常有用。

4)正如有人建議上面,嘗試使用IF EXISTS而不是COUNT也不錯。

5)儘可能在SELECT查詢中儘量使用列名而不是*。

-1

作爲您學習的第一步,請在您的查詢中使用explain

+0

錯誤的RDBMS - 他使用的是SQL Server 2005,而不是MySQL。 – roufamatic 2010-03-14 07:18:15

+0

相當於**'SET SHOWPLAN_ALL ON ** **? – kiwicptn 2010-03-14 07:27:31