您好,登錄后才能下訂單哦!
本篇內容主要講解“MYSQL數據庫優化的方式分享”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“MYSQL數據庫優化的方式分享”吧!
如果在一個系統中,用戶反映系統太卡,那么我們可以怎么進行優化呢?
如果我們訪問靜態界面不卡頓,但是申請動態數據的時候發生卡頓,說明我們數據庫所處理的請求過多,這時候有大量的查詢壓力到數據庫,這時候就需要考慮數據庫的優化了。
要想知道我們數據庫優化究竟在做一些什么事情,首先我們需要了解MYSQL的執行過程。
圖源自網絡,如有侵權請聯系刪除。
mysql執行過程
當我們請求連接mysql服務器時,mysql會對請求有一個監聽,當我們發起的請求到達以后,服務器得到我們需要執行的SQL語句,這時我們的SQL語句就進入MYSQL的內部。
MYSQL會首先查詢緩存,看這個SQL語句是否執行過,如果我們執行過這個SQL語句,則把緩存中的執行結果返回,但是在MYSQL中,這個查詢緩存默認是不開啟的,因為查詢緩存要求SQL語句和參數都要一樣,所以基本上緩存中的數據我們都命中不了。
如果我們沒有開啟查詢緩存,或者查詢緩存卻沒有找到對應的結果,這時候SQL語句就傳到了解析器中。解析器會對要執行的SQL語句進行解析,然后SQL語句就變成一顆解析樹,這時候解析樹不能馬上就執行,還需要對解析樹進行預處理,預處理的目的在于規定常量的存儲位置,計算表達式并返回結果等。
預處理結束后,此時這棵樹就是要進行執行的樹,在和初始的解析樹對比,這棵樹得到了一些優化。
MYSQL數據庫里面最關鍵的知識點,就是查詢優化器。比如我們寫這么一條SQL語句:SELECT * FROM BOOK WHERE BOOKNAME = 'BODY' AND PRICE = 56,只是SQL語句會怎么去進行執行呢?它會先執行BOOKNAME = 'BODY'還是 PRICE = 56呢?SQL語句的執行順序就是根據數據庫對數據統計表的一些信息,比如索引或者表中一共有多少行數據,MYSQL數據庫都是會進行緩存的,這時查詢優化器就會根據這些數據進行一個判定,判斷這一個SQL語句的執行過程中到底選擇哪種執行方式,運行結果可能更快。所以說這一步操作其實是MYSQL性能中最關鍵的核心,這也是我們優化所需要遵循的原則。
所以說我們平常所說的優化SQL,其實就是想讓查詢優化器能按照我們的想法,選擇最佳的執行方案,因為我們更清楚的知道我們的數據,而MYSQL看到的數據僅僅是自己收集到緩存的那一部分信息,而這些信息的正確性不能得以保證,MYSQL根據它收集到的信息選擇一個它認為最佳的執行方案,但是這個方案很有可能和我們想要它執行的方案不一致。
這里說到的選擇執行方案,其實就是剛才舉例所講的先執行BOOKNAME = 'BODY'還是 PRICE = 56,這個執行方案會傳給查詢執行引擎,引擎會去執行這一份接收到的執行方案。這個時候有一個很重要的問題:影響這個查詢性能的最關鍵原因是什么呢?其實就是我們最常講到的IO,一條SQL語句執行的時間,就是由這個時間段的IO來決定的。而執行IO又是由數據庫傳過去的這個執行方案來決定的。如果我們開啟了查詢緩存,則在將結果返回給客戶端之前,也會將執行結果存放到查詢緩存中,下一次進行該查詢會直接在查詢緩存中返回執行結果。
到此,相信大家對“MYSQL數據庫優化的方式分享”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。