本篇內(nèi)容主要講解“MySQL數(shù)據(jù)庫優(yōu)化知識點有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“MYSQL數(shù)據(jù)庫優(yōu)化知識點有哪些”吧!
公司主營業(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)站回饋大家。
通常我們在進行數(shù)據(jù)庫操作時,一般來說我們要訪問數(shù)據(jù)庫中的某一張表時,讀取者首先要獲取這張表的鎖,如果這時候有針對這張表的寫入操作到達,那么寫入者會一直等待,當讀取者完成讀取操作時,讀取者對這張表的鎖就會解除,如果這個寫入者依然還在等待隊列,則由寫入者對這張表進行加鎖,直到寫入者對表的寫入操作完成才會將對表加的鎖解除。
這里就會有一個問題需要我們?nèi)ニ伎迹喝绻却犃兄杏梢粋€寫入操作和一個讀取操作都在等待訪問這張表時,MYSQL的調(diào)度策略是什么樣的呢?
在MYSQL中,默認的調(diào)度策略是寫入者優(yōu)先于讀取者,也就是說如果等待隊列中同時存在一個寫入操作和一個讀取操作,那么寫入者首先進行操作等待它完成操作并解放鎖后,讀取者開始操作,所以說要提高MYSQL的更新數(shù)據(jù)效率,應該著重考慮怎樣減少鎖的競爭,減少寫入操作的等待時間。
1.INSERT語句
我們mysql的插入語句如上圖所示,但是當我們需要插入大量數(shù)據(jù)的時候,這樣的語句就會出現(xiàn)性能問題。例如我們需要一次性插入一萬條數(shù)據(jù)時,那么我們需要一萬條的insert語句,每一條語句都需要提交到關系引擎那里進行解析與優(yōu)化,然后才做真正的插入工作。這樣就會大大的降低性能,那我們可以采取什么策略來提高插入語句的性能呢?
(1)插入數(shù)據(jù)時同時插入多條,經(jīng)過測試,同時插入10條數(shù)據(jù)時效率最高。
(2)采用順序主鍵,例如自增主鍵,讓插入的順序盡可能順序主鍵。
(3)盡量使用REPLACE語句替代INSERT語句。
2.UPDATE語句
上圖就是我們update的基本語句,其實對于更新語句我們很容易就可以理解,其實就是對于表中已存在的數(shù)據(jù)進行修改操作,那么在更新操作中我們可以進行什么樣的優(yōu)化呢?
(1)和我們的插入語句原理一樣,當我們需要更新大量數(shù)據(jù)的時候,這樣的語句就會出現(xiàn)性能問題。所以可以同時更新多條記錄。
(2)盡量不要修改主鍵字段,其實這個也解釋過了,主鍵我們盡量使用順序主鍵。
(3)盡量小化含有UPDATE觸發(fā)器的更新操作,可能有讀者不了解什么是觸發(fā)器,建議先百度補充下知識來源。
(4)盡量避免更新建有很多索引的列。
(5)盡量避免更新處在WHERE字句條件中的列。
3.DELETE語句
delete語句是用來刪除數(shù)據(jù)庫中表的數(shù)據(jù),一般分為兩種,直接刪除表中所有數(shù)據(jù)和刪除符合某種條件的表中數(shù)據(jù)。
在MYSQL中,truncate table和delete語句都可以刪除表里面所有數(shù)據(jù),但是truncate table刪除速度更快,而且刪除后不記錄mysql日志,不可以恢復數(shù)據(jù),所以必須謹慎使用。而且如果沒有外鍵關聯(lián)的情況下,執(zhí)行truncate table是先drop table,然后再創(chuàng)建一個新的空表,速度當然遠遠快于逐條刪除行數(shù)據(jù)的delete語句。當表有外鍵關聯(lián),truncate table刪除數(shù)據(jù)方式也是逐條刪除,如果外鍵指定級聯(lián)刪除,則關聯(lián)的子表數(shù)據(jù)也會被刪除,如果未指定級聯(lián)刪除,則刪除碰到父行關聯(lián)子表,將會報錯。
DELETE語句和INSERT語句一樣會對即將操作的表進行加鎖,如果表被加鎖了,其他操作就無法執(zhí)行了,所以一種比較簡單的策略就是交給數(shù)據(jù)庫去拆分,制定一種執(zhí)行策略,比如每次限制處理1000條數(shù)據(jù)。對于量級數(shù)據(jù),刪除數(shù)據(jù)可以先刪除索引,,然后刪除其中的無用數(shù)據(jù),刪除完成重新創(chuàng)建索引,這比逐條刪除的效率絕對是質(zhì)的變化。
4.REPLACE語句
剛才在INSERT語句中我講到了其中一種優(yōu)化策略就是可以使用replace語句去替代insert語句,比如一個表中已經(jīng)在一個字段中建立了唯一索引,當向這個表中使用已經(jīng)存在的鍵值插入一條記錄,將會出現(xiàn)錯誤,這時我們就可以使用replace語句來替代insert語句,這樣我們的執(zhí)行結果就是用新紀錄的值去替代原來記錄的值。
5.REPLACE語句與INSERT語句的區(qū)別:
使用replace插入數(shù)據(jù)時,如果記錄不重復,則功能和insert語句完全一致,而且replace語句有一個顯而易見的有點就是將delete語句與insert語句合二為一,形成了一個原子操作,所以進行事務操作時復雜性大大降低了,這也是我們提倡使用replace語句替代insert語句的原因所在。
在使用replace語句時,表中必須有并且唯一的主鍵或者唯一索引,否則replace語句將沒有任何意義。
6.REPLACE語句與UPDATE語句的區(qū)別:
update語句在沒有匹配記錄時不進行任何操作,而replace語句再有重復記錄時更新,沒有重復記錄時進行插入操作。update語句可以根據(jù)子句條件對一條記錄的某一部分字段進行更新,而replace語句則是在發(fā)現(xiàn)有重復記錄時將記錄徹底刪除,再插入新的記錄。所以對于replace語句其實可以理解為是insert語句與update語句的結合。
到此,相信大家對“MYSQL數(shù)據(jù)庫優(yōu)化知識點有哪些”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!