推薦15條MySQL改善經驗,讓系統更穩定

weixin_34185560發表於2018-07-11
11368879-836246bd77969015.jpg

1、 為查詢快取優化查詢

像 NOW() 和 RAND() 或是其它的諸如此類的SQL函式都不會開啟查詢快取,謹慎使用

2、EXPLAIN 我們的SELECT查詢(可以檢視執行的行數)

可以讓我們找到潛在的效能問題

3、當只要一行資料時使用LIMIT 1

MySQL資料庫引擎會在查詢到一條資料後停止搜尋,而不是繼續往後查詢下一條符合條件的資料記錄。

4、為搜尋欄位建立索引

在識別度高的列上建立正確的索引,以提升效能

5、在Join表的時候使用相當型別的列,並將其索引

關聯表的關鍵欄位,型別一致,字符集一致,才能提高效能,否則無法使用它們的索引

6、千萬不要 ORDER BY RAND ()

執行RAND()函式(很耗CPU時間),會讓你的資料庫的效能呈指數級的下降

7、 避免SELECT *

從資料庫裡讀出越多的資料,那麼查詢就會變得越慢。

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

我們應該為資料庫裡的每張表都設定一個ID做為其主鍵,而且最好的是一個INT型的(推薦使用UNSIGNED),並設定上自動增加的 AUTO_INCREMENT標誌。

9、可以使用ENUM 而不要VARCHAR

ENUM 型別是非常快和緊湊的。在實際上,其儲存的是 TINYINT,但其外表上顯示為字串。

10、儘可能的使用NOT NULL

如果不是特殊情況,儘可能的不要使用NULL。在MYSQL中對於INT型別而言,EMPTY是0,而NULL是空值。而在Oracle中 NULL和EMPTY的字串是一樣的。NULL也需要佔用儲存空間,並且會使我們的程式判斷時更加複雜。現實情況是很複雜的,依然會有些情況下,我們需要使用NULL值。

加Java高階交流群:725633148 免費領取一套價值1W8的架構師學習資料!

11、固定長度的表會更快

表中沒有如下型別的欄位: VARCHAR,TEXT,BLOB。只要我們包括了其中一個這些欄位,那麼這個表就不是“固定長度靜態表”了,這樣,MySQL 引擎會用另一種方法來處理。 固定長度的表會提高效能,因為MySQL搜尋得會更快一些,因為這些固定的長度是很容易計算下一個資料的偏移量的,所以讀取的自然也會很快。

12、垂直分割

“垂直分割”是一種把資料庫中的表按列變成幾張表的方法,這樣可以降低表的複雜度和欄位的數目,從而達到優化的目的。

13、拆分打的DELETE或INSERT語句

這兩個操作是會鎖表的

14、越小的列會越快

對於大多數的資料庫引擎來說,硬碟操作可能是最重大的瓶頸。越小的列消耗的io資源越少

15、選擇正確的儲存引擎

MyISAM是MYSQL5.5版本以前預設的儲存引擎,基於傳統的ISAM型別,支援B-Tree,全文檢索,但是不是事務安全的,而且不支援外來鍵。不具有原子性。支援鎖表。

InnoDB是事務型引擎,支援ACID事務(實現4種事務隔離機制)、回滾、崩潰恢復能力、行鎖。以及提供與Oracle一致的不加鎖的讀取方式。InnoDB儲存它的表和索引在一個表空間中,表空間可以包含多個檔案。

相關文章