2009-01-21 43 views
9

一種性能如何調整SQL查詢?性能調優SQL - 如何?

  • 什麼技巧/工具/概念可以用來改變SQL查詢的性能?
  • 如何量化好處?
  • 需要注意什麼?


什麼名堂/工具/概念可以用來改變一個SQL查詢的性能?

  • 使用索引?他們如何在實踐中工作?
  • 標準化與非標準化數據?性能與設計/維護的權衡是什麼?
  • 預處理的中間表?創建觸發器或批處理作業?
  • 重組查詢以使用臨時表,子查詢等?
  • 將複雜查詢分解爲倍數和UNION結果?
  • 還有什麼?


如何表現進行量化?

  • Reads?
  • CPU時間?
  • 當不同的版本一起運行時,「查詢成本」?
  • 還有什麼?


這是什麼一個需要小心的?

  • 生成執行計劃的時間? (存儲特效VS嵌入式查詢)
  • 存儲的特效被迫重新編譯
  • 測試對小數據集(請查詢線性擴展,或方形的法律等?)以前運行的
  • 結果被緩存
  • 優化「正常情況」,但損害「最壞情況」
  • 什麼是「參數嗅探」?
  • 還有什麼?


注到主持人: 這是一個巨大的問題,我應該已經達到多個問題拆呢?

注爲了響應者: 因爲這是一個巨大的問題,請參考其他問題/答案/文章,而不是寫冗長的解釋。

回答

7

我真的很喜歡「Professional SQL Server 2005 Performance Tuning」一書來回答這個問題。這是Wiley/Wrox,不,我不是作者,嘿。但它解釋了很多你在這裏要求的東西,還有硬件問題。

但是,這個問題的方式,超出了可以在像這樣的評論框中回答的東西的範圍。

+0

+1我同意一本好書就是一個很好的一步,我很喜歡裏面的SQL Server 2005的性能調整 – SQLMenace 2009-01-21 00:18:19

0

這裏是我們可以按照提高性能的一些基本步驟:

  1. 檢查所涉及表的pk和fk中的索引,如果它仍然花費時間索引查詢中存在的列。
  2. 所有索引在每次操作後都會修改,因此不要對每列進行索引
  3. 批次插入之前刪除索引並重新創建索引。
  4. 選擇謹慎
  5. 使用if exists代替數
  6. 指責DBA首先檢查網絡連接之前