-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

DB2 SQL性能調優秘笈

( 簡體 字)
作者:(美) Tony Andrews類別:1. -> 資料庫 -> DB2
譯者:
出版社:機械工業出版社DB2 SQL性能調優秘笈 3dWoo書號: 35696
詢問書籍請說出此書號!

缺書
NT售價: 195

出版日:6/1/2013
頁數:158
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787111425021
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

大多數關系型數據庫調優專家都認為,對于眾多訪問關系型數據庫的應用來說,性能問題主要是因為程序編寫不當,或者SQL編寫有問題。業內專家還指出,80%的響應時間問題都應由性能差的SQL負責。我個人也非常贊同這種觀點。我曾為很多IT工作室提供過性能和調優咨詢服務,在所有這些工作室中,大多數性能問題都與修改應用和SQL代碼直接相關,或者與增加和修改索引有關。正是因為這個原因,我一直在努力讓開發人員了解各種SQL編程方法以及相關的性能問題。我認為應該讓更多的開發人員了解如何閱讀和分析DB2 Explain輸出。另外,我相信對于每一個涉及RDMS的大型開發項目而言,項目組里都應該配備一個SQL技術專家。IT行業中的SQL開發人員并不少,不過從我的經驗來看,我發現其中只有不到10%的人真正了解SQL編程中存在的性能問題,或者真正知道該如何修正這些問題。如果有一位SQL技術專家坐鎮,很多性能和邏輯問題就能在遷移到生產版本之前及早發現。

本書的出發點是為需要對SQL語句或程序調優的開發人員提供一個參考指南。一旦發現程序或應用運行很慢,大多數開發人員都會倉促地歸咎于網絡、數據庫、系統或者過大的事務量等,把它們當作罪魁禍首。不過,很多情況下程序運行速度慢的直接原因其實在于他們的代碼。希望本書能為這些開發人員提供幫助,使他們在迫不及待地給DBA或其他人打電話求助之前,能夠先自己嘗試來解決或改善遇到的性能問題。

還有另外一種情況:盡管SQL(以及SQL Explain)看起來還不錯,但實際效率很差。針對這些情況,本書還提供了一些“調優技巧”,這些技巧會采用與優化工具選用方法不同的方式對SQL進行調整優化。業界很多專家就經常使用這些技巧采用不同方式對原先性能表現很差的SQL語句進行優化,使它能更快地執行。有些情況下,修正性能問題的關鍵在于運行時間,這些調優技巧對于這種情況尤其適用。

在本書中,我總結了我在眾多IT工作室所采用的一組SQL標準和原則。如果你的IT工作室還沒有建立任何SQL標準,可以把我提供的這些標準作為不錯的起點。很多工作室都會針對他們的應用另外增加更多原則。

有了標準和原則還不夠,還需要確保遵循這些原則。我見過很多這樣的IT工作室,開發人員向我展示了他們的SQL編程、COBOL編程、Java編程等等標準,但是并沒有建立質量保證機制來確保這些標準確實得到實施。所有將進入生產階段的程序都要經過某種代碼走查或審查,以確保遵循標準,另外要保證所寫的SQL確實高效。審查可以確保程序和SQL邏輯正確,還可以確保程序的設計符合需求。本書中專門有一章列出了完成SQL編程代碼走查時需要詢問和檢查的各個問題。代碼走查需要花一點時間,不過與可能在生產階段暴露的性能或邏輯問題相比,代碼走查絕對是值得的。

很多情況下,開發人員希望對SQL代碼調優,但是不知道從哪里做起。我會告訴他們,首先要查看各個查詢中的所有謂詞,盡可能編寫得更為高效。本書提供了一個附錄,其中列出了性能不好的SQL謂詞,以及如何更高效地重寫這些謂詞。開發人員要知道一個謂詞是可索引謂詞還是不可索引謂詞,另外要知道它是Stage 1謂詞還是Stage 2謂詞,這很重要。這些問題將在本書中詳細討論。

與其說性能是一個DB2問題,還不如說它是一個關系型數據庫問題。開發人員必須注意如何建立查詢結構,以及如何基于這些查詢設計應用代碼。數據庫分析人員和數據庫建模人員必須注意如何設計一個數據庫應用。他們需要花一些時間做充分的分析。性能取決于環境、應用和需求。另外,對于性能來說,沒有最好,只有更好。盡管大多數調優都在操作系統級和數據庫級進行,但是實際上對應用代碼調優才能獲得最大的性能收益。如果應用需要使用SQL從數據庫中獲取數據,這一類應用就非常適合進行調優。由于很少的SQL語句可能會占用大多數資源,所以SQL調優通常能得到顯著的性能提升。不過,SQL調優有時可能相當復雜。本書會提供一個起點,力求簡單,使開發人員能輕松上手,讓SQL驅動的程序和應用更高效地執行。

免責聲明

本書中給出的調優技巧和建議是我個人的觀點,這些都是根據我多年來完成DB2應用設計、編程和調優總結得出的。其中一些調優技巧可能并不完全反映IBM(以及相關組織或這個領域的專家)的看法和觀點。這些調優技巧基于我個人的經驗積累而成,在我參與的各個應用中頻繁使用,使應用得到更好的性能。這100多個技巧中,每一個技巧我都曾在對DB2 SQL應用調優時使用過,力圖使查詢和程序更高效地執行。

談到一種方法好用或不好用時,很多人都會說“看情況”,相信每個人對此都不陌生。一定要謹記這一點。不要機械地照搬本書中的各個技巧,想當然地認為性能會立即改善。這些技巧是為了給開發人員指明方向,提供一些思路,以便他們改進查詢或程序。所有人都要自己完成獨立測試,驗證本書中一些說法的正確性,只有在驗證了這些說法確實正確的前提下,才能依此做出判斷和決策。

致謝

我要向這些年來與我共事過的廣大開發人員和DBA致以深深的謝意。我是程序設計走查和程序代碼走查的忠實擁護者。就我個人而言,多年來與其他同事坐在一起討論、采納他們關于程序改善的建議,期望改進得到最好、最高效的代碼而順利進入生產階段,這些讓我學到了很多很多。多年前,我們在一起開發一些龐大的應用時,他們就催促我把經驗總結下來。后來我不斷在會議上或者通過郵件為我們的開發小組提供關于編碼技術的技巧,以改善他們的查詢和程序性能。最后,終于有一天他們都勸說我應把這些技巧匯集成一本書。

我要特別感謝完成技術編輯的Chuck Kosin和David Simpson。他們是我認識的DB2領域最棒的技術人員,他們能加入這個項目真是我的榮幸。非常感謝他們給出的大量評論和建議,正是這些意見讓這本書更出色。我認識David已經有3年多了,我們曾在Themis Inc共事過。說心里話,他是我在這個行業見過的知識最淵博、最有經驗的DB2專家之一。Chuck有非常深厚的技術背景,之前就曾做過技術編輯,他與Craig Mullins共同編輯了《DB2 Developer抯 Guide》。

另外,非常感謝IBM出版社和我一同完成這本書的工作人員,感謝他們的理解和耐心。特別要感謝Mary Beth Ray、Steven Stansel、Christopher Cleveland以及參與這本書第一版的所有編輯和制作人員。要按照規定的所有格式和風格匯集成這樣一本書,對我來說真不是一件容易的事。我發自內心地認為確實需要更高的Word處理水平才能勝任這個工作。

要感謝我任職的Themis公司(位于新澤西州的韋斯特菲爾德),感謝大家支持我完成這個項目。在我多年的培訓和咨詢生涯中,這是我遇到和共事過的水平最高、溝通最順暢的一群技術人員。有了他們的協助,緊跟最新的版本與時俱進也成了一件樂事,出現問題時他們的第一手經驗真是無價之寶。

另外,最重要的是,謝謝我親愛的妻子Jan。是她幫助我建立信心、消除恐懼,鼓勵我把在這么多項目中學到和實現過的方法公開出版,與大家分享。

如果你對本書有任何問題或評論,可以與我聯系(tandrews@themisinc.com)。也可以寫信給出版社轉交給我。真誠期待你們的寶貴建議,實際上早在多年前做程序走查時我就已經感受到他人意見的重要性,從那時起就不敢再自以為是,衷心歡迎你的意見和反饋。本書的目的就是幫助廣大開發人員了解各種高效DB2 SQL編程的方法。
內容簡介:

一本能幫助DBA和開發人員全面改善DB2數據庫性能的調優秘笈,涵蓋DB2 V9和V10

好的數據庫性能往往是通過SQL代碼進行優化而得到的。本書不僅為我們奉上了100多個與SQL代碼優化相關的技巧和最佳實踐,而且還深刻闡述了SQL編碼的標準和原則,以及SQL語句調優的方法——15步調優法,可以說是無價之寶,幾乎適用于任何DB2應用的優化。所有開發人員和DBA都可以通過本書的內容構建并優化DB2應用,以得到最優的性能。
本書的作者Tony Andrews即大名鼎鼎的“Tony the Tuner”,在數據庫領域奮斗了20余年,在DB2性能調優方面積累了非常豐富的經驗。在本書中,Tony清楚地告訴我們如何去應對各種與DB2相關的性能問題,如何去發現并消除性能上的瓶頸,而且還提供了大量經驗性的解決方案。
本書中所講解的技術從未在其他書中出現過,而且一般的DB2課程中也很少涵蓋。
本書主要內容:
幫助開發人員了解在解決查詢或程序中的性能問題時如何做,以及從哪里做起
提供大量編程和SQL編碼示例
建立保證高性能SQL的標準和原則
實現高效的代碼走查,確保遵循標準
關注耗費資源最多的少量SQL語句
找出能提供最大好處的簡單解決方案
重寫查詢謂詞使之更高效,從而優化性能
更好地理解SQL優化和Runstats統計
尋找機會,找到比優化工具更好的方法來調整代碼,使之更高效
用COBOL應用優化SQL代碼
高效地檢查數據、行或表的存在性的技巧
使用Runstats的最新功能優化數據訪問路徑
目錄:

譯者序

前言

第1章 SQL優化技巧寶典100+ 1

1. 去除在謂詞列上編寫的任何標量函數 3

2. 去除在謂詞列上編寫的任何數學運算 4

3. SQL語句的Select部分只寫必要的列 4

4. 盡可能不用Distinct 5

5. 盡量將In子查詢重寫為Exists子查詢 7

6.確保宿主變量定義為與列數據類型匹配 7

7. 由于優化工具處理“或”邏輯可能有問題,所以盡量采用其他方式重寫 8

8. 確保所處理的表中數據分布和其他統計信息正確并反映當前狀況 9

9. 盡可能用UNION ALL取代UNION 11

10. 考慮使用硬編碼還是使用宿主變量 12

11. 盡可能減少DB2的SQL請求 13

12. 盡量將區間謂詞重寫為Between謂詞 15

13. 考慮使用全局臨時表 16

14. 優先使用Stage 1謂詞而不是Stage 2謂詞 18

15. 記住(某些)謂詞的順序很重要 20

16. 多個子查詢排序 21

17. 索引關聯子查詢 22

18. 了解DB2 Explain工具 23

19. 使用工具進行監控 24

20. 采用提交和重啟策略 24

21. 實現優良的索引設計 25

22. 避免與非列表達式不一致 26

23. 所有篩選邏輯放在應用代碼之外 27

24. 確保涉及Min和Max的子查詢謂詞要處理可能返回Null的情況 28

25. 如果查詢只選擇數據,一定要把游標處理寫為For Fetch Only(只獲取)或For Read Only(只讀) 29

26. 避免只是為了幫助確定代碼邏輯應當執行更新還是插入而從表中選擇一行 30

27. 避免只是為了得到更新值而從表中選擇一行 31

28. 利用動態SQL語句緩存 31

29. 避免使用Select * 32

30. 當心可以為Null的列,還要當心SQL語句可能從數據庫管理器返回Null 33

31. 盡量減少執行打開和關閉游標的次數 34

32. SQL中要避免非邏輯 34

33. 使用關聯ID來保證更好的可讀性 35

34. 保證表和索引文件合法而且有組織 36

35. 充分利用Update Where Current of Cursor和Delete Where Current of Cursor 36

36. 使用游標時,利用多行獲取、多行更新和多行插入來使用ROWSET定位和獲取 37

37. 了解鎖定隔離級別 38

38. 了解Null處理 40

39. 編程時要考慮性能 42

40.讓SQL來處理 42

41.使用Lock Table 43

42. 考慮OLTP前端處理 44

43. 考慮使用動態可滾動游標 45

44. 利用物化查詢表改善響應時間(只適用動態SQL) 47

45. 結合Select的Insert 49

46. 充分利用多行獲取 50

47. 充分利用多行插入 52

48. 充分利用多行更新 53

49. 充分利用多行刪除 55

50.在Select子句中使用標量全選 55

51. 在動態SQL中充分利用REOPT ONCE和REOPT AUTO,在靜態SQL中充分利用REOPT VARS和REOPT ALWAYS 57

52. 標識易失表 58

53. 使用ON COMMIT DROP改進 59

54. 使用多個Distinct 60

55. 充分利用反向索引掃描 60

56. 當心Like語句 61

57. 正確地設置聚簇索引 61

58. 必要時使用Group By表達式 63

59. 當心表空間掃描 64

60. 不要問你已經知道的信息 64

61. 注意查詢中的表順序 65

62. 使用左外聯接而不是右外聯接 66

63. 檢查不存在的行 67

64. 使用存儲過程 68

65. 不要只是為了排序而選擇某一列 70

66. 盡可能限制結果集 70

67. 批量刪除時充分利用DB2 V8的改進DISCARD功能 70

68. 充分利用DB2 LOAD工具完成批量插入 71

69. 注意視圖、嵌套表表達式和公共表表達式的物化 72

70. 考慮壓縮數據 74

71. 考慮并行性 75

72. 讓STDDEV、STDDEV_SAMP、VAR和VAR_SAMP函數遠離其他函數 76

73. 考慮使用ROWID數據類型(V8)或RID函數(V9)直接訪問行 77

74. 用真實統計和一定的數據測試查詢以反映性能問題 78

75. 在WHERE子句中指定前導索引列 80

76. 盡可能使用WHERE而不是HAVING完成篩選 81

77. 盡可能考慮Index Only處理 82

78. DB2 V9中表達式上的索引 83

79. 考慮DB2 V9 Truncate語句 84

80. 在子查詢中使用DB2 V9 Fetch First和Order by 85

81. 利用DB2 V9樂觀鎖定 85

82. 使用DB2 V9 MERGE語句 87

83. 了解DB2 NOFOR預編譯選項 89

84. 考慮Select Into中使用Order By 89

85. 盡量編寫布爾項謂詞 90

86. 編寫傳遞閉包 90

87. 避免用Order By排序 91

88. 盡可能使用聯接而不是子查詢 92

89. 當心Case邏輯 92

90. 在Order By子句中充分利用函數 93

91. 了解你的DB2版本 93

92. 了解日期運算 94

93. 了解大容量插入選擇 95

94. 了解Skip Locked Data(V9)避免鎖定 96

95. 對輸入流排序 97

96. 如果需要真正的唯一性,可以使用V8 Generate_Unique函數 98

97. 了解聲明臨時表的新選項 98

98. 執行Get Diagnostics時需要注意 99

99. 適當地對In列表排序 100

100. 結合Select的Update和Delete(V9) 100

101. 只在必要時執行SQL語句 101

102. 充分利用內存中的表 101

103. 避開通用型SQL語句 102

104. 避免不必要的排序 102

105. 了解表達式和列函數 103

106. 結合使用謂詞時要注意 103

107. 為搜索查詢增加冗余謂詞 103

108. 充分利用改進的動態緩存(V10) 104

109. 嘗試當前提交來避免鎖(V10) 106

110. 嘗試使用系統時態表獲取歷史數據(V10) 107

111. 嘗試使用業務時態表獲取歷史數據(V10) 109

112. 了解分級函數 (V10) 110

113. 充分利用擴展指示符(V10) 112

114. 得到更大的時間戳精度(V10) 113

115. 嘗試Index Includes(V10) 114

116. 使用With Return to Client(V10) 114

第2章 DB2 SQL提示 116

1. 在SQL語句的最后使用Optimize for 1 Row語句 117

2. 為SQL查詢增加A.PKEY = A.PKEY謂詞,這里PKEY等于表的主鍵列 118

3. 更換索引選擇 119

4. 改變表處理順序 121

5. 使用分布式動態SQL 122

第3章 SQL標準和原則 125

面向COBOL開發人員 125

面向所有SQL開發人員 129

第4章 SQL程序走查 135

第5章 檢查存在性 139

例1 139

例2 141

第6章 Runstats 143

第7章 查詢初始調優步驟 146

附錄A 謂詞重寫示例 150

附錄B DB2 SQL術語 153
序: