MySQL5:效能優化

五月的倉頡發表於2015-11-07

效能優化

優化MySQL資料庫是資料庫管理員和資料庫開發人員的必備技能。MySQL優化,一方面是找出系統的瓶頸,提高MySQL資料庫的整體效能;一方面需要合理的結構設計和引數調整,以提高使用者操作響應的速度;同時應該儘可能節省系統資源,以便系統可以提供更大負荷的服務。

MySQL資料庫優化是多方面的,有幾條優化原則:

1、減少系統的瓶頸

2、減少資源的佔用

3、增加系統的反應速度

 

優化查詢

1、索引對查詢的影響

我有一個book表,裡面有10條記錄,沒有索引查詢的時候:

使用了索引:

看到不使用索引的時候rows為10,也就是說掃描了表中的10條記錄,而使用索引,rows為1,說明掃描了表中的1條記錄,其查詢速度自然比不使用索引快。而且possible_keys和key的值都是BkNameIdx,說明查詢時使用了BkNameIdx索引

2、使用索引查詢

使用索引查詢有幾種特殊情況,特別提一下:

(1)使用LIKE關鍵字的查詢語句

在使用LIKE關鍵字進行查詢的查詢語句中,如果匹配字串的第一個字元為"%",索引不會起作用,只有"%"不在第一個位置,索引才會起作用

(2)使用多列索引的查詢語句

MySQL可以為多個欄位建立索引,一個索引可以包含16個欄位,對於多列索引,只有查詢條件中使用了這些欄位中第一個欄位時,索引才會被使用

(3)使用OR關鍵字的查詢語句

查詢語句的查詢條件中只有OR關鍵字,且OR前後兩個條件都是索引時,查詢才會使用索引,否則,查詢將不使用索引

3、避免使用SELECT *命令

從表中讀取的資料越多,查詢會變得越慢,始終指定需要的列,是一個良好的習慣

4、永遠為每張表設定一個ID

我們應該為資料庫裡的每張表都設定一個ID作為其主鍵,而且最好是一個INT型的,並設定上自動增加的AUTO_INCREMENT標識。就算有些VARCHAR欄位型別的值,它永遠不會重複,也不要設定為主鍵,使用VARCHAR型別來當主鍵會使效能下降

 

資料庫結構優化

一個好的資料庫設計方案對於資料庫的效能常常會起到事半功倍的效果,合理的資料庫結構不僅可以使資料庫佔用更小的磁碟空間,而且能夠使查詢速度更快。資料庫結構的設計,需要考慮資料冗餘、查詢和更新的速度、欄位的資料型別是否合理等多方面內容。

下面提供幾條優化資料庫結構的建議:

1、將欄位很多的表分解為多個表

對於欄位很多的表,如果有些欄位的使用頻率很低,可以將這些欄位分離出來形成新表。因為當一個表的資料量很大時,會由於使用頻率低的欄位的存在而變慢,通過分解欄位,可以提高表的查詢效率

2、增加中間表

對於需要經常聯合查詢的表,可以建立中間表以提高查詢效率。通過建立中間表,把需要經常聯合查詢的資料插入到中間表,然後將原來的聯合查詢改為對中間表的查詢,以此來提高查詢效率

3、優化插入記錄的速度

插入記錄時,影響插入速度的主要是索引、唯一性校驗、一次插入記錄條數等,根據這些情況,可以分別進行優化(以使用InnoDB的表為例):

(1)禁用唯一性檢查

插入資料時,MySQL會對插入的記錄進行唯一性校驗。這種唯一性校驗也會降低插入記錄的速度,為了降低這種情況對查詢速度的影響,可以在插入記錄之前禁用唯一性檢查,等到記錄插入完畢之後再開啟:

SET UNIQUE_CHECKS = 0;

開啟唯一性檢查:

SET UNIQUE_CHECKS = 1;

(2)禁用外來鍵檢查

插入資料之前禁止對外來鍵的檢查,資料插入之後再恢復對外來鍵的檢查,禁用外來鍵檢查的語句如下:

SET foreign_key_checks = 0;

恢復對外來鍵檢查的語句為:

SET foreign_key_checks = 1;

(3)禁止自動提交

插入資料之前禁止事物的自動提交,資料匯入完成之後,執行恢復自動提交操作。禁止自動提交的語句如下:

SET autocommit = 0;

恢復自動提交的語句為:

SET autocommit = 1;

 

相關文章