SQL應(yīng)用重構(gòu)

出版時(shí)間:2010-1  出版社:機(jī)械工業(yè)出版社  作者:(美)法拉特 等著,蘇敬凱 等譯  頁(yè)數(shù):286  譯者:蘇敬凱  
Tag標(biāo)簽:無(wú)  

前言

在翻譯本書(shū)時(shí),正流行著幾本名為“啥啥之美”的書(shū)。本書(shū)也可以說(shuō)講的就是“如何將SQL寫(xiě)得更美”。SQL之美就在于用清楚合理的方式告訴DBMS你要做什么,讓DBMS總能以最優(yōu)的方式高效地完成任務(wù)。SQL是一種描述式語(yǔ)言,在描述中要表達(dá)清楚能夠影響優(yōu)化器決策的要點(diǎn),同時(shí)避免過(guò)程化思維的那些細(xì)節(jié)。而要做到這一點(diǎn),理解優(yōu)化器的工作方式和SQL的理念至關(guān)重要,正如某條廣告語(yǔ)講的那樣“知其道,用其妙”。本書(shū)作者從事數(shù)據(jù)庫(kù)咨詢工作多年,在本書(shū)中,不僅舉出了很多具體生動(dòng)的例子,還講述了很多重構(gòu)sQL應(yīng)用的思想。無(wú)論你是DBA還是程序員,本書(shū)都能幫你寫(xiě)出或改寫(xiě)(也就是重構(gòu))出優(yōu)美的sQL語(yǔ)句、清楚明了的處理過(guò)程,從而交付出高效的系統(tǒng),贏得眾人的贊許,就像書(shū)中的很多故事那樣。參加本書(shū)翻譯的還有趙龍剛、金振林、周志強(qiáng)、楊寧等。本書(shū)翻譯力求忠于原著,但由于時(shí)間倉(cāng)促,譯者水平有限,翻譯錯(cuò)誤和不妥之處在所難免,歡迎廣大讀者批評(píng)指正。

內(nèi)容概要

當(dāng)數(shù)據(jù)庫(kù)的性能達(dá)不到預(yù)期時(shí),該怎么辦呢?在用昂貴的硬件升級(jí)的力、法來(lái)解決這一問(wèn)題之前,請(qǐng)拿起這本書(shū)。本書(shū)將教你如何發(fā)現(xiàn)和評(píng)估需要重構(gòu)的代碼,理解重構(gòu)和性能之間至關(guān)重要的關(guān)系。如果你的應(yīng)用陷入了困境,那么本書(shū)將能幫你使它重新加快速度。    在本書(shū)中你將學(xué)習(xí)到:    ·判斷你是否(以及在哪里)可以得到性能的提升。    ·應(yīng)用快速修復(fù)的方法,例如在存儲(chǔ)函數(shù)和過(guò)程中限制對(duì)數(shù)據(jù)庫(kù)的調(diào)用。    ·改寫(xiě)SQL語(yǔ)句以提高數(shù)據(jù)訪問(wèn)的效率。    ·重構(gòu)任務(wù),例如用存儲(chǔ)過(guò)程代替應(yīng)用代碼,用全面的SQL語(yǔ)句代替重復(fù)的過(guò)程化語(yǔ)句。    ·增加并行以重構(gòu)流程。    ·使用模式擴(kuò)展、常規(guī)視圖、物化視圖、分區(qū)等來(lái)重構(gòu)設(shè)計(jì)。

作者簡(jiǎn)介

作者:(美國(guó))Stephane Farout(法拉特) (美國(guó))Pascal L Hermite 譯者:蘇敬凱 等Stephane Faroult,從1983年開(kāi)始接觸關(guān)系數(shù)據(jù)庫(kù)和SQL語(yǔ)言,他從事數(shù)據(jù)庫(kù)咨詢工作已經(jīng)20多年了。O'Reilly的《The Art of SQL》也是他的作品。

書(shū)籍目錄

前言第1章 評(píng)估   一個(gè)簡(jiǎn)單的例子   評(píng)估可能的收益 第2章 健全檢查   統(tǒng)計(jì)信息與數(shù)據(jù)失真   檢查索引   解析與綁定變量   大數(shù)據(jù)量操作   事務(wù)管理 第3章 用戶函數(shù)和視圖   用戶自定義函數(shù)   視圖 第4章 測(cè)試框架   生成測(cè)試數(shù)據(jù)   比較備選版本 第5章 語(yǔ)句重構(gòu)   執(zhí)行計(jì)劃和優(yōu)化器指示  分析緩慢查詢  重構(gòu)查詢核心  重新構(gòu)建最初的查詢第6章 任務(wù)重構(gòu)  SQL的理念  更改代碼結(jié)構(gòu)第7章 重構(gòu)流程和數(shù)據(jù)庫(kù)  重組處理過(guò)程  撼動(dòng)基礎(chǔ)第8章 實(shí)踐中的重構(gòu)  你能看到數(shù)據(jù)庫(kù)嗎  失敗的查詢  速度很快的查詢  并非顯然完全錯(cuò)誤的查詢  結(jié)束語(yǔ)附錄A 腳本及樣例程序附錄B 工具

章節(jié)摘錄

插圖:如果一個(gè)索引不能達(dá)到我們所追求的效果,那么有時(shí)一個(gè)更好的索引卻能提供更好的性能。有個(gè)問(wèn)題,為什么要在accountid上單獨(dú)建立一個(gè)索引?從本質(zhì)上說(shuō),索引是鍵值的一個(gè)已排序列表(在樹(shù)中排序),這些鍵值關(guān)聯(lián)著和它們匹配的記錄的物理地址,就像本書(shū)后面的索引一樣——它是一個(gè)關(guān)鍵字及相關(guān)頁(yè)碼的已排序的列表。如果我們搜索的是兩個(gè)字段的值而索引只有其中的一個(gè)字段,那么我們就不得不讀出所有符合所搜索的鍵值的記錄,然后再丟掉那些在另一個(gè)字段上值不匹配的記錄。如果基于這兩個(gè)字段建立索引,那就能直接得到真正想要的記錄了。我們可以創(chuàng)建一個(gè)基于(accountid,txdate)的索引,因?yàn)榻灰兹掌谑遣樵兊牧硪粋€(gè)條件。創(chuàng)建了這個(gè)基于兩個(gè)字段的復(fù)合索引之后,我們就能確保SQL引擎在索引上能夠進(jìn)行有效的綁定搜索(這叫做范圍掃描)。在我的測(cè)試數(shù)據(jù)中,單字段索引使MySQL的性能提升了3.1倍,而雙字段的索引則使速度提高了3.4倍,現(xiàn)在運(yùn)行這一程序只需要花3.5分鐘。而壞消息是:在Oracle和SQLServer上,即便使用了雙字段索引,也沒(méi)有取得比之前單字段索引時(shí)更進(jìn)一步的性能提升(參見(jiàn)表1.4)。與我在現(xiàn)實(shí)生活中遇到過(guò)的很多處理過(guò)程一樣,這個(gè)例子的明顯特征是嵌套循環(huán)。并且我們還發(fā)現(xiàn):在循環(huán)的深處,返回的每一條記錄都要調(diào)用工具函數(shù)AboveThreshold()。我前面提到過(guò),transactions表包含了200萬(wàn)條記錄,而且其中1/7的記錄屬于我們要檢查的area。這樣,我們就調(diào)用了AboveThreshold()函數(shù)很多很多次。如果一個(gè)函數(shù)被調(diào)用了極多次,每一個(gè)非常小的單一修改都會(huì)因巨大的杠桿效應(yīng)而獲益頗豐。比如假設(shè)我們把一次調(diào)用的執(zhí)行時(shí)間從0.005秒降到了0.004秒。

媒體關(guān)注與評(píng)論

“有很多講述程序重構(gòu)的書(shū),但一直缺少講述數(shù)據(jù)庫(kù)代碼重構(gòu)的書(shū),直到本書(shū)出版為止。在StephaneFaroult的這本新書(shū)中有很多高級(jí)的SQL技術(shù),我一直在自己的工作中使用這些技術(shù)。我熱情地向大家推薦這本書(shū)?!薄  狹ichaelBlaha,咨詢師,OMTAssociatesInc.“終于有了這樣一本書(shū),它強(qiáng)調(diào)TSQL編寫(xiě)者在數(shù)據(jù)庫(kù)總體性能上的作用,以及怎么來(lái)改進(jìn)這一情形。對(duì)于任何一位數(shù)據(jù)庫(kù)專(zhuān)業(yè)人士來(lái)說(shuō),只要你想要提升自己的查詢編寫(xiě)能力,或者想要改進(jìn)別人寫(xiě)的查詢,那么本書(shū)就是你的必讀之書(shū)?!薄  狣wayneKing,總裁,KRIDANConsulting“本書(shū)裝滿了寶貝。在放下本書(shū)之前,你一定會(huì)體驗(yàn)到驚喜。在本書(shū)中,F(xiàn)aroult先生慷慨地分享了他的那些豐富的經(jīng)歷和清晰的思維?!薄  猂oyOwens,數(shù)據(jù)庫(kù)開(kāi)發(fā)人員,CBORDGroup,Inc

編輯推薦

《SQL應(yīng)用重構(gòu)》由機(jī)械工業(yè)出版社出版。

圖書(shū)封面

圖書(shū)標(biāo)簽Tags

無(wú)

評(píng)論、評(píng)分、閱讀與下載


    SQL應(yīng)用重構(gòu) PDF格式下載


用戶評(píng)論 (總計(jì)10條)

 
 

  •   送貨很快,推薦,非常不錯(cuò)
  •   很好的,一直買(mǎi)這個(gè)的。
  •   還是挺好的。值得一看。
  •   內(nèi)容挺不錯(cuò),很有參考借鑒價(jià)值
  •   書(shū)中內(nèi)容還是不錯(cuò)的,但就是內(nèi)容組織上好像有點(diǎn)散,這可能是外國(guó)人的思維而定的了
  •   書(shū)中的很多思想和技術(shù)早就見(jiàn)過(guò),不新鮮了,對(duì)實(shí)際操作沒(méi)有多大啟發(fā)
  •   書(shū)很薄,沒(méi)有預(yù)想中的好
  •   整體來(lái)說(shuō)內(nèi)容還不錯(cuò)!書(shū)的前半部分,作者能給出較具體的代碼并從低效率開(kāi)始重構(gòu)出高效率的代碼,分析原因講解比較透徹!書(shū)的后半部分,作者多數(shù)從理論分析,很少給出代碼,比較適合有一定工作經(jīng)驗(yàn)的朋友。這本書(shū)適合有一定經(jīng)驗(yàn)的SQL工作者,至少?gòu)摹爸貥?gòu)”這個(gè)角度來(lái)說(shuō)也得有一定的工作經(jīng)驗(yàn)才適合讀這本書(shū)。本書(shū)輔助測(cè)試程序多數(shù)為JAVA、JDBC,主體SQL有ORACLE、MS SQL、MySQL。可以到相應(yīng)的網(wǎng)站下載本書(shū)的各種語(yǔ)言版本的SQL Demo。建議閱讀此書(shū)的朋友能夠先下載本書(shū)代碼,然后每讀到相應(yīng)章節(jié)時(shí)候進(jìn)行相應(yīng)的代碼演示。在此提示一下:感覺(jué)本書(shū)作者主要是以O(shè)RACLE為主寫(xiě)的代碼。 MS SQL中的代碼有一定的BUG,有的根本測(cè)試不過(guò), 因?yàn)槔锩婢尤挥蠴RACLE的一部分代碼沒(méi)修改為MS SQL。 對(duì)此不負(fù)責(zé)任的表示譴責(zé)!
  •   感覺(jué)還不錯(cuò),里面的思路是很多開(kāi)發(fā)人員想不到的
  •   本書(shū)內(nèi)容挺好的,講解的有的地方一般,有的地方則挺詳細(xì)的。
 

250萬(wàn)本中文圖書(shū)簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書(shū)網(wǎng) 手機(jī)版

京ICP備13047387號(hào)-7