1. 程式人生 > >《高效能SQL調優精要與案例解析》一書談SQL調優(SQL TUNING或SQL優化)學習

《高效能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相關的一些具體特性和命令,並對與其他關係庫相通之處進行了說明和提示,以期儘量讓其他關係庫的讀者通過閱讀本書也能從中受益,從而達到觸類傍通的效果。

最後,非常感謝各位讀者的關注,如有任何疑問,可以通過本人郵箱、微博或本部落格通知本人,如不能一一回復,也一定盡力抽時間統一答覆,見諒,再次感謝。

相關推薦

高效能SQL調案例解析SQL調SQL TUNINGSQL優化學習

《高效能SQL調優精要與案例解析》一書上市發售以來,很多熱心讀者就該書內容及一些具體問題提出了疑問,因讀者眾多外加本人日常工作的繁忙 ,在這裡就SQL調優學習進行討論並對熱點問題統一作答。 首先,我們說說何為SQL調優。SQL調優是關係庫領域的一項技能或工作,其來自SQL

軟體設計模式--筆記1

一:面向物件的核心要素封裝(Encapsulation)、繼承(Inheritance)、多型(Polymorphism)1.封裝封裝就是合理的隱藏和公開。In computer science, information hiding is the principle of segregation of th

下載ASP.NET MVC5框架剖析案例解析(MVC5原理剖析、漏洞及運維安全、設計模式)

mvc5框架剖析與案例解析 運維安全 mvc5原理剖析 地址:http://pan.baidu.com/s/1dFhBu2d 密碼:peas轉一播放碼,200多課!本課程針對MVC5版本的ASP.NET MVC,同時涉及太多底層實現的內容,所以大部分是找不到現成參考資料的,這些內容大都來自講師對源

mysql進階 十九 SQL語句如何準查找某時間段的數據

lmap 數據 ont and 需要 class 實現 項目開發 href SQL語句如何精準查找某一時間段的數據 在項目開發過程中,自己需要查詢出一定時間段內的交易。故需要在sql查詢語句中加入日期時間要素,sql語句如何實現? SELECT *

預處理、const、staticsizeof-C++中const有什麽作用至少說出3個

什麽 需要 char 修改 抽象 ons 時間 數據 amp 1:作用如下: (1)const用於定義常量:const定義的常量編譯器可以對其進行數據靜態類型安全檢查。 (2)const修飾函數形式的參數:當輸入參數為用戶自定義類型和抽象數據類型時,應該將“值傳遞”改為“c

BINDdns解析

bind基礎dns入門1.常見的dns解析方式: 正向解析:由主機名解析出IP地址 反向解析:由IP地址解析出主機名2.名稱域:層級分布式數據庫 (金字塔型) 第一層: 根域 " . "表示 第二層 頂級域(宏觀上分為倆種)

thinkphp5.0thinkphp3.2的幾個不同之處主要寫5.0的

5.0的入口檔案是放在public資料夾下面,所以如果要單獨配置站點,則需要選到public資料夾 模板渲染方面:5.0使用的是:return $this->fetch();(fetch裡不帶引數,是自動定位到當前操作的模板檔案,如果帶引數就跟原來的一樣) 資料庫方面:5.0在

影象處理分析數字影象處理第二版學習筆記5.1

第五章,影象復原 1,什麼是影象復原? 影象復原是利用某種先驗知識來重建或者復原被退化的影象。一般來講,影象復原就是將退化模型化,並且採用相反的過程進行處理,以便復原出原影象。 2,影象退化模型表達形式? 退化過程模型化之後為一個退化函式和一個加性噪聲項。 g(x,y)=h(

影象處理分析數字影象處理第二版學習筆記4.2

第四章 頻率域增強 1,頻率域中濾波基礎? 頻率域濾波基礎根據傅立葉變換的平移性質:當u0=M/2,v0=N/2根據尤拉公式可化為 :. 第一步,將輸入的原影象乘以(-1)^(x+y)進行中心變換; 第二步,計算變換後圖像的DFT(離散傅立葉變換); 第三步,用濾波函式H(u

影象處理分析數字影象處理第二版學習筆記4.1

第四章,頻率域影象增強 1,連續和離散傅立葉變換和反變換表示式? 一維連續:                     二維連續:       &n

Visual C NET資料庫開發經典案例解析光碟免費下載

                為了讓更多的朋友學得更快我共享出這程式碼(由於檔案太大,我只上傳了第二章人事管理的程式碼):  配套光碟使用說明(1)  本光碟是《Visual C#.NET資料庫開發經典案例解析》的配套光碟,與圖書一起發行,不得單獨出售。(2)  本光碟的主要內容包括各章示例程式的程式碼及資

影象處理分析數字影象處理第二版學習筆記4.1

第四章,頻率域影象增強 1,連續和離散傅立葉變換和反變換表示式? 一維連續:                     二維連續:              一維離散:                 二維離散:              2,二維影象離散

影象處理分析數字影象處理第二版學習筆記5.1

第五章,影象復原 1,什麼是影象復原? 影象復原是利用某種先驗知識來重建或者復原被退化的影象。一般來講,影象復原就是將退化模型化,並且採用相反的過程進行處理,以便復原出原影象。 2,影象退化模型表達形式? 退化過程模型化之後為一個退化函式和一個加性噪聲項。 g(x,

看這篇就夠啦!微信小程式入門實戰,橫掃常用元件API開發技巧完整版包含全部原始碼

第1章:什麼是微信小程式? 1 開篇及課程特色介紹 2 直觀感受一下微信小程式 3 小程式適合做什麼樣的應用 4 對開發者的影響 5 學習基礎 6 小作業 第2章:小程式環境大件與開發工具介紹 1 開篇介紹及下載工具 2 小程式目前情況及限制 3 小程式開發

講 DispatchServlet原始碼解析(OnRefresh初始化

1.  固定特殊bean的id /** 用於檔案上傳解析 */ public static final String MULTIPART_RESOLVER_BEAN_NAME = "multipartResolver"; /** 用於區域解析 */ pub

從Hadoop框架MapReduce模式中海量資料處理含淘寶技術架構

            從hadoop框架與MapReduce模式中談海量資料處理前言    幾周前,當我最初聽到,以致後來初次接觸Hadoop與MapReduce這兩個東西,我便稍顯興奮,覺得它們很是神祕,而神祕的東西常能勾起我的興趣,在看過介紹它們的文章或論文之後,覺得H

mybatis攔截器的使用輸出日誌sql語句

2016-08-28 14:48:02  [ http-apr-8888-exec-8:70630 ] - [ INFO ]  ---------------------------------------------- 2016-08-28 14:48:02  [ http-apr-8888-exec-8

在keil中觀察STM32產生的PWM 用示波器觀察實質頻率模擬不符 是計算值的10倍疑惑中。。。

 第一步:選擇軟體模擬 1.配置軟體模擬  第二步:進入模擬,呼叫logicc analyer 觀察波形 1.按模擬按鍵進入模擬介面 2.開啟模擬 示波器 介面 3.設定觀察埠  4.開始模

Oracle常用資料字典表系統表系統檢視及查詢SQL

資料字典是Oracle存放有關資料庫資訊的地方,其用途是用來描述資料的。比如一個表的建立者資訊,建立時間資訊,所屬表空間資訊,使用者訪問許可權資訊的檢視等。資料字典系統表,儲存在system表空間中。查詢所有資料字典可用語句“select * from dictionary;”。資料字典分類資料字典主要可分為

關於“官方案例精選”中Mecanim章節中的IK小結部分的無法再5.x以上版本正確觸發

概述:筆者在“官方案例精選”一書中,第六章的Mecanim中的IK講解的部分,遇到部分疑惑的地方;接下來,為可能有與我相同問題的夥伴,說明下我測試的結果。提出問題:匹配Effector位置的指令碼,放置在Update函式中無法正確的找到位置的問題(書中是指明還在Update函