官术网_书友最值得收藏!

前言

為什么寫這本書

數據庫引擎是一項包羅萬象的技術大全,紛繁復雜,不能輕易窮盡。

數據庫查詢優化器是數據庫引擎的重中之重。掌握了查詢優化器,就等于掌握了數據庫的精髓,得查詢優化器者則得數據庫天下。

在數據庫查詢優化技術領域,尚沒有一本將理論與實踐結合的書籍,能幫助查詢優化技術的愛好者掌握其全貌、掌握其細節、掌握其精髓、掌握其奧妙

如果能有一本書可以包括數據庫查詢優化技術的完整面貌,相信一定會使探索者少些崎嶇摸索,這自然是一件好事。于是筆者心懷忐忑,雖自知力不能及,但還是決定奮筆一試,如工匠砌磚、螻蟻啃土,一點一滴,將自己多年總結的經驗匯集于此,終于小成。

本書的主要內容

本書主要討論以下問題:

?“查詢優化”究竟包括什么樣的優化技術?為什么能做那些優化?

?“查詢優化器”是怎么實現的?“查詢優化器”是怎么做優化工作的?

?PostgreSQL和MySQL的查詢優化器各自實現了什么樣的查詢優化技術?

?PostgreSQL和MySQL的查詢優化功能有什么異同?

第一個問題在第一篇中進行了討論。第二、第三個問題在第二、第三篇中通過對PostgreSQL和MySQL查詢優化器的源碼分析進行了回答。第四個問題在第四篇中通過對PostgreSQL和MySQL查詢優化的功能對比,對兩者的差異進行了回答。

從全書來看,本書涉及查詢優化器的原理、代碼實現、工程實踐3個部分。

原理部分,概括總結了查詢優化器的兩大優化策略,一是邏輯優化,二是物理優化。在每一個優化策略中,都結合原理、運用示例,努力展示了查詢優化器的全貌。這部分內容將解答:“查詢優化”究竟包括什么樣的優化技術?為什么能做那些優化?

代碼實現部分,通過深入數據庫內核的源碼,對查詢優化器的實現進行深度的、全方位的探索,力求為程序員和數據庫愛好者展示數據庫引擎查詢優化器的真實面目。行文選取了開源數據庫PostgreSQL和MySQL的查詢優化器,抽絲剝繭,進行了詳細、全面的分析。這部分內容將解答:“查詢優化器”是怎么實現的?“查詢優化器”是怎么做優化工作的?

工程實踐部分,通過原理分析、代碼分析和示例,進行了以下3個對比:

?對比PostgreSQL和MySQL的查詢優化器的實現異同。

?對比PostgreSQL和MySQL的查詢優化器的功能異同。

?對比查詢優化器和原理之間的異同。

工程實踐部分還通過大量詳細的示例比較,總結了PostgreSQL、MySQL支持的優化點和不支持的優化點,為DBA調優提供了許多新穎的、好的思路。揭秘內核,幫助讀者掌握其實現方式,可使讀者在面對SQL調優時不再是霧里看花,而是心中有數。系統地掌握這些,可以超越依靠日積月累的學習方式,能夠快速進階。

工程實踐部分通過3個對比,完成了以下3個結合:

?通過代碼分析,首次將關系代數、代價估算等查詢優化原理與代碼實現、工程實踐結合。

?通過對PostgreSQL和MySQL的對比,首次揭秘了兩大開源數據庫的查詢優化器的異同,使得數據庫愛好者能夠以本書為基礎,更好地結合查詢優化技術,進而掌握各種類型的數據庫SQL調優。

?通過原理、代碼、分析、示例,完成了將數據庫愛好者對查詢優化器強烈渴望掌握的愿望與輕松掌握的現實的結合,使得查詢優化器不再那么神秘莫測。

本書的主要特色

本書的主要特色如下:

?全面揭秘數據庫查詢優化技術。把數據庫的各種查詢優化技術以工程化的視角進行剖析,集原理、源碼分析、示例實踐為一體。

?重點分析了PostgreSQL和MySQL的查詢優化器的實現。以兩大開源數據庫的查詢優化器的實現為藍本,分析了它們的實現過程、實現原理,幫助讀者深入理解掌握數據庫的核心技術,使他們在SQL調優過程中不僅掌握怎么調優而且知道為什么可以調優。

?詳細對比了PostgreSQL和MySQL的查詢優化技術的支持能力。通過大量示例,分析對比了兩大開源數據庫的查詢優化功能的強弱,幫助讀者掌握兩個數據庫查詢優化功能相同和不同之處,為應用系統選型提供衡量查詢優化功能的依據。

本書面向的主要讀者

如果您是一名數據庫內核的工作者,本書對數據庫查詢優化器的內核代碼分析,一定會幫您全面掌握查詢優化這一技術。再結合理論部分,將使您理解得更加深刻。

本書不僅講述了PostgreSQL查詢優化器的實現,還講述了MySQL查詢優化器的實現,這對于從事這兩個數據庫內核開發的人員來說尤其有幫助。如果您能把結合本書和源碼(務必要讀代碼)兩者相互印證進行掌握,將像弄潮兒濤頭立,查詢優化技術盡在您的掌中。

本書從理論角度出發構造了大量示例,通過源碼和功能的對比分析,更是進一步揭示了這兩個數據庫查詢優化器的功能異同。對于從事查詢優化器性能提升的工作人員幫助更大——因為原理部分講了為什么,代碼分析部分講了怎么做,示例與對比部分講了有什么不同,可做的事情僅剩下“沒有實現的優化怎么做”了。路已鋪墊,啟示已明,發揮就靠您自己了。

如果您是一名數據庫實踐者、DBA,本書一定會幫到您。查詢優化器能做什么樣的優化?為什么查詢優化器能做某種類型的優化?對于這兩個問題,原理部分能幫您解惑。如果您是一名DBA,您將更多地從代碼分析、工程實踐部分獲益。源碼級的內幕揭秘,無疑能幫您更好地做好SQL語句的日常優化工作;代碼、功能、實踐的比較,無疑能幫助您從初學到理解,進而過渡到得心應手地應用。

生活不是一成不變的,工作中您也許會在PostgreSQL與MySQL間切換,掌握原理又能幫您以不變應萬變。本書所涉及的查詢優化器的知識,適用于Oracle的DBA、DB2的DBA、SQLServer的DBA、SYSBASE的DBA。也許從此以后,您會成為一名萬能的DBA!

如果您是一名數據庫研究者、開發者、教學者、學生、愛好者,那么本書對您來說是一本不可多得的參考資料。查詢優化器作為數據庫中最重要、最難學、最精彩的部分,探索起來道路漫長,艱苦而無趣,也許本書能有幸成為您的同行伙伴,一路走來,不離不棄。探索數據庫內核,猶如面對一座大山,陡峭艱險,無路可尋。看似非常艱難的事情,當您一書在手,仿佛為您提供了一柄手杖,步行于山澗溝壑時,且健且速。

特別是對于學生,如果能憑著這本薄書摸索進入數據庫內核的世界,當是筆者最大的心愿。學生是未來的棟梁,是將技術發揚光大的希望。

多年來,作者一直翹首以盼,希望能有這么一類書,與己成為好友。現在,有了這么一本薄書,唯愿讀者開卷有益。

如何閱讀本書

從模塊的角度看,本書可分為4部分:原理、PostgreSQL實現、MySQL實現、三者對比總結。所以建議讀者以模塊為單位分別閱讀。如果是讀PostgreSQL實現、MySQL實現的章節,則應結合代碼,前后聯系溝通為好,不要掌握局部忽視整體。

從內容的分布上看,原理是綜述部分,既講述了原理對查詢優化的指導,也對PostgreSQL實現、MySQL實現進行了總結,所以要從實踐個例上升到理論的高度才能看清全貌。把原理和PostgreSQL實現結合起來,反復互為印證,會對掌握PostgreSQL有幫助;把原理和MySQL實現結合起來,反復互為印證,會對掌握MySQL有幫助;把4部分完全結合起來一起掌握,不僅可以幫助DBA和愛好者理解PostgreSQL、MySQL,還可以幫助他們理解其他數據庫。因為本書中的兩套源碼的比較加上原理的解析,有助于幫助理解其他數據庫查詢優化器的原理;示例則有助于在其他數據庫上執行以檢查數據庫對查詢優化的支持程度。

另外,為便于讀者更好地掌握數據庫查詢優化技術及本書內容,本書的附錄從方法學的角度對閱讀本書提供了4個方面的建議。

為什么特別推薦學生閱讀本書

對于愛好數據庫技術的學生來說,選擇數據處理技術,是一條明智之路。數據越來越多,數據源越來越多,大數據的時代不僅已經來臨了,而且會一直發展、不斷發展。數據庫技術是處理大數據的核心技術,數據庫技術會隨著時代的需求,一直前進。而查詢優化,在數據庫領域,不僅有著重要的理論地位,而且在實踐中也異常重要且用途廣泛,SQL調優占據著數據庫性能調優的半壁江山。

現今,就業競爭異常激烈,一份好的工作往往會有數以千計的人同時去爭取。這對于諸多剛剛畢業、沒有什么工作經驗的學生來說,無疑是非常嚴峻的考驗,尤其對于想找到理想工作的學生更是難上加難。因為現在用人單位提供的工作崗位對應聘者的素質和技能的要求越來越高,這無疑是剛剛畢業的學生最大的短板。

對于用人單位來說,想招到一名合格的員工也不容易,招到一名技能純熟、素質高的員工更難。

在這樣的大背景下,如果學生在求學期間能夠打下良好的專業基礎,找工作時定會增加很多機會;如果學生能夠在自己的專業領域深入探索,對數據結構、操作系統、數據庫等重要課程熟練掌握,使自己具備良好的專業素質,必然能使自己在找工作時具備更強的競爭力;如果學生能在某些課程上把理論和實踐結合起來,把理論和源碼結合起來,熟練掌握重量級軟件的內核代碼,找到心儀的工作將更為容易。用人單位喜歡有理論、工作初始就能上手做事的人才。而學生們想成為這樣的人才,就需要在學校里打下堅實的基礎。

本書在數據庫領域就能起到這樣的作用。引領學生把數據庫理論和數據庫實踐結合起來,把數據庫理論和數據庫引擎源碼結合起來,有效幫助讀者梳理數據庫技術中最重要的部分——查詢優化技術的全貌,這必定對掌握這部分技術有很大的幫助。

所以,筆者特別推薦學生閱讀本書。建議在本科高年級階段或研究生階段,大家能與本書為伴,邊讀源碼(PostgreSQL和MySQL的源碼)邊讀本書,互為印證。筆者相信通過短短數月的努力,大家得到的將是足夠好的技能、足夠高的起點、足夠強的競爭力!

學生是未來、是希望,學生強,社會亦將受益。學生若能通過本書使自己變強,將是筆者最大之幸。

勘誤及支持

由于筆者的水平有限,書中難免會有筆誤、差錯、格式錯誤或遺漏等問題,希望廣大讀者能把發現的錯誤告訴筆者,我將不勝感謝。本書的進步和完善,有您的幫助和愛護,定能再上一層樓。您可以發送電子郵件到:database_XX@163.com。由于時間有限,也許筆者不能一一答復所有的電子郵件,但是會定期整理并匯總信息到筆者的博客(http://bolg.163.com/li_hx)上。

書中分析、探索的數據庫源碼的下載地址如下:

PostgreSQL,V9.2.3,源自http://www.postgresql.org/ftp/source/v9.2.3/。

MySQL,V5.6.10,源自http://dev.mysql.com/downloads/mysql/。

致謝

在我的生命中,家人是最重要的。伏案疾書不舍晝夜,心中一直牽掛的是父母、姐妹、妻子和各地的親人們。他們是我寫作的動力源泉,他們是我得以堅持完稿的堅強后盾。感謝父母給予了我生命并育我成人,感謝妻子朝夕相伴給予我鼓勵和慰藉,感謝我遠方的親人們讓我心意暖暖。

感謝中國人民大學信息學院王珊教授多年的教導,并高屋建瓴地為本書提出修訂意見,她嚴謹的工作作風影響了本書的風格。成書之際,王老師樂為作序,我心懷感激,念念在心。

感謝為開源社區無私奉獻的人們,沒有他們就沒有本書。本書的內容源于對開源數據庫內核代碼的分析,故筆者認為本書也應該回歸社區為眾人服務。堅持寫下自己的所得,與他人共享,是一件快事,也是一件幸事。

感謝編輯楊福川先生和孫海亮先生為本書付出的努力和耗費的心血,書名源于楊先生,書稿樣式由孫先生設定。寫了一本書,交了兩個好朋友。謝謝他們。

感謝每一位讀者,我們一起進步,你們將是本書繼續完善的新動力。

我深知本書尚不能達到書名標識的高度,而今邁步從頭越。

主站蜘蛛池模板: 策勒县| 玛纳斯县| 长泰县| 理塘县| 宜川县| 屏东市| 襄城县| 宜都市| 梨树县| 广河县| 金湖县| 锡林浩特市| 临城县| 中西区| 洛扎县| 民勤县| 开化县| 天峨县| 肃宁县| 正阳县| 琼海市| 卓资县| 桐柏县| 庆城县| 大港区| 博爱县| 双流县| 宁夏| 靖安县| 泸水县| 大兴区| 大同市| 泰州市| 即墨市| 大姚县| 镇平县| 阜南县| 松滋市| 广丰县| 包头市| 台北市|