您好,登錄后才能下訂單哦!
本篇內容主要講解“MYSQL數據庫優化知識點有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“MYSQL數據庫優化知識點有哪些”吧!
通常我們在進行數據庫操作時,一般來說我們要訪問數據庫中的某一張表時,讀取者首先要獲取這張表的鎖,如果這時候有針對這張表的寫入操作到達,那么寫入者會一直等待,當讀取者完成讀取操作時,讀取者對這張表的鎖就會解除,如果這個寫入者依然還在等待隊列,則由寫入者對這張表進行加鎖,直到寫入者對表的寫入操作完成才會將對表加的鎖解除。
這里就會有一個問題需要我們去思考:如果等待隊列中由一個寫入操作和一個讀取操作都在等待訪問這張表時,MYSQL的調度策略是什么樣的呢?
在MYSQL中,默認的調度策略是寫入者優先于讀取者,也就是說如果等待隊列中同時存在一個寫入操作和一個讀取操作,那么寫入者首先進行操作等待它完成操作并解放鎖后,讀取者開始操作,所以說要提高MYSQL的更新數據效率,應該著重考慮怎樣減少鎖的競爭,減少寫入操作的等待時間。
1.INSERT語句
我們mysql的插入語句如上圖所示,但是當我們需要插入大量數據的時候,這樣的語句就會出現性能問題。例如我們需要一次性插入一萬條數據時,那么我們需要一萬條的insert語句,每一條語句都需要提交到關系引擎那里進行解析與優化,然后才做真正的插入工作。這樣就會大大的降低性能,那我們可以采取什么策略來提高插入語句的性能呢?
(1)插入數據時同時插入多條,經過測試,同時插入10條數據時效率最高。
(2)采用順序主鍵,例如自增主鍵,讓插入的順序盡可能順序主鍵。
(3)盡量使用REPLACE語句替代INSERT語句。
2.UPDATE語句
上圖就是我們update的基本語句,其實對于更新語句我們很容易就可以理解,其實就是對于表中已存在的數據進行修改操作,那么在更新操作中我們可以進行什么樣的優化呢?
(1)和我們的插入語句原理一樣,當我們需要更新大量數據的時候,這樣的語句就會出現性能問題。所以可以同時更新多條記錄。
(2)盡量不要修改主鍵字段,其實這個也解釋過了,主鍵我們盡量使用順序主鍵。
(3)盡量小化含有UPDATE觸發器的更新操作,可能有讀者不了解什么是觸發器,建議先百度補充下知識來源。
(4)盡量避免更新建有很多索引的列。
(5)盡量避免更新處在WHERE字句條件中的列。
3.DELETE語句
delete語句是用來刪除數據庫中表的數據,一般分為兩種,直接刪除表中所有數據和刪除符合某種條件的表中數據。
在MYSQL中,truncate table和delete語句都可以刪除表里面所有數據,但是truncate table刪除速度更快,而且刪除后不記錄mysql日志,不可以恢復數據,所以必須謹慎使用。而且如果沒有外鍵關聯的情況下,執行truncate table是先drop table,然后再創建一個新的空表,速度當然遠遠快于逐條刪除行數據的delete語句。當表有外鍵關聯,truncate table刪除數據方式也是逐條刪除,如果外鍵指定級聯刪除,則關聯的子表數據也會被刪除,如果未指定級聯刪除,則刪除碰到父行關聯子表,將會報錯。
DELETE語句和INSERT語句一樣會對即將操作的表進行加鎖,如果表被加鎖了,其他操作就無法執行了,所以一種比較簡單的策略就是交給數據庫去拆分,制定一種執行策略,比如每次限制處理1000條數據。對于量級數據,刪除數據可以先刪除索引,,然后刪除其中的無用數據,刪除完成重新創建索引,這比逐條刪除的效率絕對是質的變化。
4.REPLACE語句
剛才在INSERT語句中我講到了其中一種優化策略就是可以使用replace語句去替代insert語句,比如一個表中已經在一個字段中建立了唯一索引,當向這個表中使用已經存在的鍵值插入一條記錄,將會出現錯誤,這時我們就可以使用replace語句來替代insert語句,這樣我們的執行結果就是用新紀錄的值去替代原來記錄的值。
5.REPLACE語句與INSERT語句的區別:
使用replace插入數據時,如果記錄不重復,則功能和insert語句完全一致,而且replace語句有一個顯而易見的有點就是將delete語句與insert語句合二為一,形成了一個原子操作,所以進行事務操作時復雜性大大降低了,這也是我們提倡使用replace語句替代insert語句的原因所在。
在使用replace語句時,表中必須有并且唯一的主鍵或者唯一索引,否則replace語句將沒有任何意義。
6.REPLACE語句與UPDATE語句的區別:
update語句在沒有匹配記錄時不進行任何操作,而replace語句再有重復記錄時更新,沒有重復記錄時進行插入操作。update語句可以根據子句條件對一條記錄的某一部分字段進行更新,而replace語句則是在發現有重復記錄時將記錄徹底刪除,再插入新的記錄。所以對于replace語句其實可以理解為是insert語句與update語句的結合。
到此,相信大家對“MYSQL數據庫優化知識點有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。