《高性能SQL調優精要與案例解析》一書談SQL調優(SQL TUNING或SQL優化)學習

《高性能SQL調優精要與案例解析》一書上市發售以來,不少熱心讀者就該書內容及一些具體問題提出了疑問,因讀者衆多外加本人平常工做的繁忙 ,在這裏就SQL調優學習進行討論並對熱點問題統一做答。數據庫

首先,咱們說說何爲SQL調優。SQL調優是關係庫領域的一項技能或工做,其來自SQL Tuning一詞,雖然也有不少同行更多稱之爲SQL優化,對應的英文單詞爲SQL Optimization,但本人始終認爲SQL調優是一個過程,SQL調優也更能體現這項技術或工做的過程,而SQL優化一詞,本人認爲更通俗些,也更能體現這項技術或工做的結果,我的認爲SQL調優精確和專業些,所以,也更習慣將這項技能或工做稱爲SQL調優。工具

其次,有些讀者會問道《高性能SQL調優精要與案例解析》一書中,前面五章是否和SQL調優相關,是否無關緊要?本人認爲這是本書的一大特點,那就是更注重基礎理論的講解和學習,任何一門技能的學習,基礎 和理論很重要,這也是本書的亮點和特性之一。不能否認,不少同類書中的案例很是好,也頗有表明性,而偏偏是這些基礎理論的缺失,容易讓很大一部分讀者閱讀這些書籍時感到很是的迷茫。SQL調優的關鍵是根據SQL語句,執行計劃和具體數據環境的對比,找出SQL語句解析和執行過程當中出現問題的環節,進而才能經過最合理的措施去解決這個出問題的環節。SQL語句,這個通常不會存在問題,想學SQL調優的讀者,沒幾個不懂SQL語句的,具體數據環境,也不會存在問題,關鍵的問題是閱讀和分析執行計劃,而作到這點的前提是能讀懂執行計劃中的相關操做和數據項,然而,理解這些操做和數據項,是須要基礎理論的支撐的,也就是說,須要掌握數據庫相關的基礎理論的,好比:要理解全表掃描(FTS)操做,就得知道表的概念,段的概念,段的HWM的概念;要理解索引(INDEX)相關的操做,就得知道索引的概念,索引的組織結構,索引的特性;要理解分組和排序(GROUP BY和ORDER BY),咱們就得知道私有內存區(PGA)是怎麼回事兒,其是如何組織和管理的;要理解邏輯讀,咱們就得理解緩衝區(Buffer),進而須要理解數據塊等概念。。。因此,要想真正掌握SQL調優,掌握這些基礎理論是必要的,不然,只看那些具體的案例,也沒多大意義,由於脫離了具體的理論,看那些案例根本就理解不了案例中那麼作的根本緣由,只掌握些方法,而不能理解,遇到問題只能生搬硬套,多數時候根本解決不了問題,還可能越弄越糟。固然,我不是說那些案例沒有用,在掌握了基礎理論後,去研究和分析一些案例,也是頗有價值的。就像一位神醫給了咱們一個絕世祕方,咱們能看懂嗎?看不懂,由於咱們不懂醫學知識,有用嗎?估計沒多大用,咱們橫不能見到病人就用那個藥方,SQL調優解決問題,道理和醫生給人看病是同樣的,只是咱們面對的是數據庫,醫生面對的是人而已。經過上面這些,咱們知道,《高性能SQL調優精要與案例解析》一書中前四章基礎理論不但很重要,並且必須有。。第五章講的是事務相關內容,這章內容說實話,和SQL調優沒太大直接關係,但我爲何寫呢?由於關係庫中的鎖資源,是很是珍貴的資源,由於鎖機制實現方面因素,其餘有些關係庫中鎖資源更加珍貴,而Oracle中鎖機制雖然更優越些,從而Oracle應用人員在涉及DML操做時能夠更從容些,但這並不意味着能夠隨心所欲,現實中,即便不少資深研發人員,都不是很懂得Oracle事務的特性和應用,以致於常常沒必要要的用到手工加鎖的語句,這既形成了大量鎖相關資源的浪費,更主要的會形成嚴重的鎖阻塞和死鎖等問題,進而致使嚴重的後果,這也是本人在本書中增長事務一章內容的初衷。性能

再次,有些讀者會問到《高性能SQL調優精要與案例解析》一書主要以Oracle數據庫爲例講解了SQL調優,而該書是否適用其餘關係庫?本人寫該書的初衷,是爲想學習SQL調優及從事該項工做的讀者提供一個學習和掌握SQL調優的正確而快捷的路徑和方法,而SQL調優這項技能,必須在深刻理解和掌握關係庫機制和原理的前提下才能作好,而你們知道,各關係庫大的方面有不少共性,只是有些具體的細節會有所不一樣,就拿索引來講吧,各關係的實現細節是稍有差異的,然而,咱們並不能指望各關係庫全部細節都徹底同樣,畢竟,即便同一種關係庫,不一樣版本的具體細節也是有差異的,而且,有些差異還比較大,咱們能作的只能是不斷學習和提高本身。所以,要想講解SQL調優這門技能,尤爲是經過具體實例去講解,必須選擇某型關係庫進行具體講解,沒有誰能脫離具體的數據庫選型,能把SQL調優這門技能講清楚,由於脫離具體的數據庫,根本什麼也講不了,也講不清楚。本人之因此選擇Oracle來進行講解,其一是關係庫市場上Oracle的佔有率比較高,本人接觸的也比較多;其二,全部關係庫中,就優化器來說,Oracle的優化器也是最早進的。就SQL調優分析和解決問題的思路、方法和步驟來講,各關係庫幾乎是相同的,只是具體形式、命令、方法會有所差異,例如:Oracle獲取執行計劃,能夠經過GUI工具,能夠經過命令行,也能夠經過系統內置的包,還能夠經過跟蹤來獲取;而SQL SERVER,也能夠經過EM工具,經過命令行,也能夠經過跟蹤獲取;而DB2和開源關係庫,也能夠經過多種方法獲取SQL語句的執行計劃。而閱讀和分析執行計劃來講,各關係庫幾乎是相同的。Oracle提供了大量的系統視圖來獲取有些信息,高版本的SQL SERVER和DB2,甚至高版本的開源關係庫也提供了大量的系統視圖。Oracle對SQL語句的優化依賴統計數據,SQL SERVER和DB2也一樣依賴統計數據,甚至開源關係庫也依賴統計數據,只是他們生成和實現的機制和細節會有些差別。又好比說,Oracle提供了大量的hint,SQL server和db2也提供了hint這種調優方式,只是具體hint的做用和語法不一樣,開源庫有些版本也提供了hint功能,也許實現的沒那麼完美而已。還有,本書雖然以Oracle爲基礎講解,但在寫做過程當中,也儘可能注意剝離和泛化Oracle相關的一些具體特性和命令,並對與其餘關係庫相通之處進行了說明和提示,以期儘可能讓其餘關係庫的讀者經過閱讀本書也能從中受益,從而達到觸類傍通的效果。學習

最後,很是感謝各位讀者的關注,若有任何疑問,能夠經過本人郵箱、微博或本博客通知本人,如不能一一回復,也必定盡力抽時間統一答覆,見諒,再次感謝。優化

相關文章
相關標籤/搜索