語句執(zhí)行后,會顯示三個字段: Query_ID(執(zhí)行ID) | Duration(持續(xù)時間)| Query(查詢語句) ;

公司主營業(yè)務:成都網(wǎng)站建設、做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出中山免費做網(wǎng)站回饋大家。
拿到后Query_ID后,可執(zhí)行 show profile for query Query_ID ,查看詳細的準備時間,執(zhí)行時間、執(zhí)行結束( preparing、executing、end )等。
顯示用戶正在運行的線程,需要注意的是,除了 root 用戶能看到所有正在運行的線程外,其他用戶都只能看到自己正在運行的線程,看不到其它用戶正在運行的線程。除非單獨個這個用戶賦予了PROCESS 權限。
顯示字段包含: User| Host| db | Command | Time| State| Info 等。
解析語句,查詢是否命中索引,及,命中何種索引,用以判斷是否符合我們的預期。
返回字段包含: select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra 等。
select_type 常見類型:
(1) SIMPLE(簡單SELECT,不使用UNION或子查詢等)
(2) PRIMARY(子查詢中最外層查詢,查詢中若包含任何復雜的子部分,最外層的select被標記為PRIMARY)
(3) UNION(UNION中的第二個或后面的SELECT語句)
(4) SUBQUERY(子查詢中的第一個SELECT,結果不依賴于外部查詢)
table 常見類型:
顯示這一行的數(shù)據(jù)是關于哪張表的.
有時不是真實的表名字,看到的是derivedx(x是個數(shù)字,我的理解是第幾步執(zhí)行的結果)
type 常見類型:
對表訪問方式,表示MySQL在表中找到所需行的方式,又稱“訪問類型”。
常用的類型有: ALL、index、range、 ref、eq_ref、const、system、NULL (從左到右,性能從差到好)
possible_keys
指出MySQL能使用哪個索引在表中找到記錄,查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢使用(該查詢可以利用的索引,如果沒有任何索引顯示 null)
該列完全獨立于EXPLAIN輸出所示的表的次序。這意味著在possible_keys中的某些鍵實際上不能按生成的表次序使用。
如果該列是NULL,則沒有相關的索引。在這種情況下,可以通過檢查WHERE子句看是否它引用某些列或適合索引的列來提高你的查詢性能。如果是這樣,創(chuàng)造一個適當?shù)乃饕⑶以俅斡肊XPLAIN檢查查詢
key
key列顯示MySQL實際決定使用的鍵(索引),必然包含在possible_keys中
如果沒有選擇索引,鍵是NULL。要想強制MySQL使用或忽視possible_keys列中的索引,在查詢中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。
key_len
表示索引中使用的字節(jié)數(shù),可通過該列計算查詢中使用的索引的長度,非實際長度,為最大可能長度。
注:不損失精確性的情況下,長度越短越好。
ref
列與索引的比較,表示上述表的連接匹配條件,即哪些列或常量被用于查找索引列上的值。
rows
估算出結果集行數(shù),表示MySQL根據(jù)表統(tǒng)計信息及索引選用情況,估算的找到所需的記錄所需要讀取的行數(shù);
extra
該列包含MySQL解決查詢的詳細信息,有以下幾種情況:
(1).Distinct
一旦MYSQL找到了與行相聯(lián)合匹配的行,就不再搜索了
(2).Not exists
MYSQL優(yōu)化了LEFT JOIN,一旦它找到了匹配LEFT JOIN標準的行,就不再搜索了
(3).Range checked for each
Record(index map:#)
沒有找到理想的索引,因此對于從前面表中來的每一個行組合,MYSQL檢查使用哪個索引,并用它來從表中返回行。這是使用索引的最慢的連接之一
(4).Using filesort
看到這個的時候,查詢就需要優(yōu)化了。MYSQL需要進行額外的步驟來發(fā)現(xiàn)如何對返回的行排序。它根據(jù)連接類型以及存儲排序鍵值和匹配條件的全部行的行指針來排序全部行;
(5).Using temporary
看到這個的時候,查詢需要優(yōu)化了。這里,MYSQL需要創(chuàng)建一個臨時表來存儲結果,這通常發(fā)生在對不同的列集進行ORDER BY上,而不是GROUP BY上;
(6).Using index
列數(shù)據(jù)是從僅僅使用了索引中的信息而沒有讀取實際的行動的表返回的,這發(fā)生在對表的全部的請求列都是同一個索引的部分的時候。
(7).Using where
使用了WHERE從句來限制哪些行將與下一張表匹配或者是返回給用戶。如果不想返回表中的全部行,并且連接類型ALL或index,這就會發(fā)生,或者是查詢有問題。
您好,MySQL排序字段中有時間函數(shù)的優(yōu)化性能可以從以下幾個方面入手:
1. 使用索引:在排序字段中使用索引可以有效提高排序查詢的性能,并且可以減少排序查詢的時間。
2. 避免使用復雜的時間函數(shù):盡量避免使用復雜的時間函數(shù),因為這些函數(shù)會增加查詢的復雜度,從而降低查詢的性能。
3. 避免使用大量的排序字段:盡量避免使用大量的排序字段,這樣可以減少排序查詢的時間,從而提高查詢的性能。
4. 使用更高效的排序算法:使用更高效的排序算法,比如快速排序,可以更有效地排序查詢,從而提高查詢的性能。
5. 使用緩存:使用緩存可以有效地提高查詢的性能,尤其是對于頻繁查詢的排序字段。
總之,MySQL排序字段中有時間函數(shù)的優(yōu)化性能可以從以上幾個方面入手,從而有效地提高查詢的性能。
數(shù)據(jù)庫優(yōu)化一方面是找出系統(tǒng)的瓶頸,提高MySQL數(shù)據(jù)庫的整體性能,而另一方面需要合理的結構設計和參數(shù)調整,以提高用戶的相應速度,同時還要盡可能的節(jié)約系統(tǒng)資源,以便讓系統(tǒng)提供更大的負荷.
1. 優(yōu)化一覽圖
2. 優(yōu)化
筆者將優(yōu)化分為了兩大類,軟優(yōu)化和硬優(yōu)化,軟優(yōu)化一般是操作數(shù)據(jù)庫即可,而硬優(yōu)化則是操作服務器硬件及參數(shù)設置.
2.1 軟優(yōu)化
2.1.1 查詢語句優(yōu)化
1.首先我們可以用EXPLAIN或DESCRIBE(簡寫:DESC)命令分析一條查詢語句的執(zhí)行信息.
2.例:
顯示:
其中會顯示索引和查詢數(shù)據(jù)讀取數(shù)據(jù)條數(shù)等信息.
2.1.2 優(yōu)化子查詢
在MySQL中,盡量使用JOIN來代替子查詢.因為子查詢需要嵌套查詢,嵌套查詢時會建立一張臨時表,臨時表的建立和刪除都會有較大的系統(tǒng)開銷,而連接查詢不會創(chuàng)建臨時表,因此效率比嵌套子查詢高.
2.1.3 使用索引
索引是提高數(shù)據(jù)庫查詢速度最重要的方法之一,關于索引可以參高筆者MySQL數(shù)據(jù)庫索引一文,介紹比較詳細,此處記錄使用索引的三大注意事項:
2.1.4 分解表
對于字段較多的表,如果某些字段使用頻率較低,此時應當,將其分離出來從而形成新的表,
2.1.5 中間表
對于將大量連接查詢的表可以創(chuàng)建中間表,從而減少在查詢時造成的連接耗時.
2.1.6 增加冗余字段
類似于創(chuàng)建中間表,增加冗余也是為了減少連接查詢.
2.1.7 分析表,,檢查表,優(yōu)化表
分析表主要是分析表中關鍵字的分布,檢查表主要是檢查表中是否存在錯誤,優(yōu)化表主要是消除刪除或更新造成的表空間浪費.
1. 分析表: 使用 ANALYZE 關鍵字,如ANALYZE TABLE user;
2. 檢查表: 使用 CHECK關鍵字,如CHECK TABLE user [option]
option 只對MyISAM有效,共五個參數(shù)值:
3. 優(yōu)化表:使用OPTIMIZE關鍵字,如OPTIMIZE [LOCAL|NO_WRITE_TO_BINLOG] TABLE user;
LOCAL|NO_WRITE_TO_BINLOG都是表示不寫入日志.,優(yōu)化表只對VARCHAR,BLOB和TEXT有效,通過OPTIMIZE TABLE語句可以消除文件碎片,在執(zhí)行過程中會加上只讀鎖.
2.2 硬優(yōu)化
2.2.1 硬件三件套
1.配置多核心和頻率高的cpu,多核心可以執(zhí)行多個線程.
2.配置大內存,提高內存,即可提高緩存區(qū)容量,因此能減少磁盤I/O時間,從而提高響應速度.
3.配置高速磁盤或合理分布磁盤:高速磁盤提高I/O,分布磁盤能提高并行操作的能力.
2.2.2 優(yōu)化數(shù)據(jù)庫參數(shù)
優(yōu)化數(shù)據(jù)庫參數(shù)可以提高資源利用率,從而提高MySQL服務器性能.MySQL服務的配置參數(shù)都在my.cnf或my.ini,下面列出性能影響較大的幾個參數(shù).
2.2.3 分庫分表
因為數(shù)據(jù)庫壓力過大,首先一個問題就是高峰期系統(tǒng)性能可能會降低,因為數(shù)據(jù)庫負載過高對性能會有影響。另外一個,壓力過大把你的數(shù)據(jù)庫給搞掛了怎么辦?所以此時你必須得對系統(tǒng)做分庫分表 + 讀寫分離,也就是把一個庫拆分為多個庫,部署在多個數(shù)據(jù)庫服務上,這時作為主庫承載寫入請求。然后每個主庫都掛載至少一個從庫,由從庫來承載讀請求。
2.2.4 緩存集群
如果用戶量越來越大,此時你可以不停的加機器,比如說系統(tǒng)層面不停加機器,就可以承載更高的并發(fā)請求。然后數(shù)據(jù)庫層面如果寫入并發(fā)越來越高,就擴容加數(shù)據(jù)庫服務器,通過分庫分表是可以支持擴容機器的,如果數(shù)據(jù)庫層面的讀并發(fā)越來越高,就擴容加更多的從庫。但是這里有一個很大的問題:數(shù)據(jù)庫其實本身不是用來承載高并發(fā)請求的,所以通常來說,數(shù)據(jù)庫單機每秒承載的并發(fā)就在幾千的數(shù)量級,而且數(shù)據(jù)庫使用的機器都是比較高配置,比較昂貴的機器,成本很高。如果你就是簡單的不停的加機器,其實是不對的。所以在高并發(fā)架構里通常都有緩存這個環(huán)節(jié),緩存系統(tǒng)的設計就是為了承載高并發(fā)而生。所以單機承載的并發(fā)量都在每秒幾萬,甚至每秒數(shù)十萬,對高并發(fā)的承載能力比數(shù)據(jù)庫系統(tǒng)要高出一到兩個數(shù)量級。所以你完全可以根據(jù)系統(tǒng)的業(yè)務特性,對那種寫少讀多的請求,引入緩存集群。具體來說,就是在寫數(shù)據(jù)庫的時候同時寫一份數(shù)據(jù)到緩存集群里,然后用緩存集群來承載大部分的讀請求。這樣的話,通過緩存集群,就可以用更少的機器資源承載更高的并發(fā)。
一個完整而復雜的高并發(fā)系統(tǒng)架構中,一定會包含:各種復雜的自研基礎架構系統(tǒng)。各種精妙的架構設計.因此一篇小文頂多具有拋磚引玉的效果,但是數(shù)據(jù)庫優(yōu)化的思想差不多就這些了.
網(wǎng)站題目:mysql中怎么優(yōu)化 mysql優(yōu)化的幾種方法
地址分享:http://chinadenli.net/article24/ddoccce.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供、網(wǎng)站策劃、做網(wǎng)站、商城網(wǎng)站、企業(yè)網(wǎng)站制作、微信小程序
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)