接下來我們要討論的是資料庫效能優化的另一方面,即運用資料庫伺服器內建的工具輔助效能分析和優化。
▲show
執行下面這個命令可以了解伺服器的執行狀態:
mysql>showstatus;
該命令將顯示出一長列狀態變數及其對應的值,其中包括:被中止訪問的使用者數量,被中止的連線數量,嘗試連線的次數,併發連線數量最大值,以及其他許多有用的資訊。這些資訊對於確定系統問題和效率低下的原因是十分有用的。
▲explain
explain能夠分析select命令的處理過程。這不僅對於決定是否要為表加上索引很有用,而且對於了解mysql處理複雜連線的過程也很有用。
下面這個例子顯示了如何用explain提供的資訊逐步地優化連線查詢。(本例來自mysql文件,見http://www.mysql.com/doc/e/x/explain.html。原文寫到這裡似乎有點潦草了事,特加上此例。)
假定用explain分析的select命令如下所示:
explainselecttt.ticketnumber,tt.timein,
tt.projectreference,tt.estimatedshipdate,
tt.actualshipdate,tt.clientid,
tt.servicecodes,tt.repetitiveid,
tt.currentprocess,tt.current***erson,
tt.recordvolume,tt.***rinted,et.country,
et_1.country,do.custname
fromtt,et,etaset_1,do
wherett.submittimeisnull
andtt.actualpc=et.employid
andtt.assignedpc=et_1.employid
andtt.clientid=do.custnmbr;
select命令中出現的表定義如下:
※表定義
表列列型別
ttactualpcchar(10)
ttassignedpcchar(10)
ttclientidchar(10)
etemployidchar(15)
docustnmbrchar(15)
※索引表索引
ttactualpc
ttassignedpc
ttclientid
etemployid(主鍵)
docustnmbr(主鍵)
※tt.actualpc值分布不均勻
在進行任何優化之前,explain對select執行分析的結果如下:
tabletypepossible_keyskeykey_lenrefrow***tra
etallprimarynullnullnull74
doallprimarynullnullnull2135
et_1allprimarynullnullnull74
ttallassignedpc,clientid,actualpcnullnullnull3872
rangecheckedforeachrecord(keymap:35)
每乙個表的type都是all,它表明mysql為每乙個表進行了完全連線!這個操作是相當耗時的,因為待處理行的數量達到每乙個錶行數的乘積!即,這裡的總處理行數為74*2135*74*3872=45,268,558,720。1
測試全攻略
include class1.h include include cppunit testrunner.h include cppunit testresult.h include cppunit testresultcollector.h include cppunit extensions he...
資料庫優化全攻略
數 據庫是企業資訊的核心,其應用水平的高低直接影響到企業管理水平。選擇了乙個高效能的資料庫產品不等於就有乙個好的資料庫應用系統,如果資料庫系統設計不 合理,不僅會增加客戶端和伺服器端程式的程式設計和維護的難度,而且還會影響系統實際執行的效能。本專題主要講解資料庫各種效能優化技術,從而避免磁碟i o ...
Ubuntu 藍芽全攻略
ubuntu 的藍芽支援相信很多同學都在使用吧,插上就用,連個手機傳個檔案啊什麼的非常方便。但是你有沒有想過壓榨出其更大的潛能呢?有沒有想過坐到電腦前,開啟藍 牙連上手機,戴上耳麥,直接就通過電腦來接打 了呢?或者連上你的 ipod touch,聲就從電腦的音箱中飄出了呢?當然,windows 系統...