MySQL效能優化(未完待續)
阿新 • • 發佈:2018-12-15
概述
資料庫往往是web應用的效能瓶頸,我們應該儘可能地提高資料庫的效能,這往往需要我們對MySQL做一些自定義的設定。下面的內容大多為學習筆記,實戰程式碼也不多,主要是為了提供一個突破MySQL效能瓶頸的總體思路。
參考的書籍《深入淺出MySQL》等
一、修改表引擎
MySQL中有一個儲存引擎的概念,針對不同的儲存需求,我們可以選擇最優的儲存引擎,也就是同一個資料庫裡面的不同的表使用不同的儲存引擎。
儲存引擎相關操作
檢視預設儲存引擎
show variables like 'table_type'
- 檢視當前資料庫支援的儲存引擎
show engines \G
或者
show variables like 'have%'
- 在建立資料表時,可以使用engine關鍵字指定使用的儲存引擎(MySQL5.5以前預設為MyISAM,之後預設為InnoDB)
- 使用alter關鍵字修改已存在的表
alter table table_name engine = innodb;
常用儲存引擎
特點 | MyISAM | InnoDB | MEMORY | MERGE |
---|---|---|---|---|
事務安全 | 支援 | |||
外來鍵支援 | 支援 | |||
鎖機制 | 表鎖 | 行鎖 | 表鎖 | 表鎖 |
全文索引 | 支援 |
MyISAM
MyISAM不支援事務,也不支援外來鍵,其優點是訪問的速度快,對事務沒有要求的或者以SELECT、INSERT為主的表可以使用這個引擎。
InnoDB
InnoDB一般用於web事務處理,也是MySQL中唯一支援外來鍵索引的儲存引擎。
MEMORY
MEMORY儲存引擎將資料儲存在記憶體中,故其訪問速度非常快,但是使用時需要注意資料的持久化,以免丟失。一般用於存放中間結果,便於高效得對中間結果進行分析,缺點是對資料表的大小有嚴格的限制。
MERGE
MERGE儲存引擎是一組MyISAM表的(邏輯)組合,這些MyISAM表結構必須完全相同,其本省並沒有資料,只是對其組合的表進行操作,刪除MERGE表對其組合的表也沒有影響,其可以突破對單個MyISAM表大小的限制,並且通過將不同的表釋出在磁碟的不同區域,有效得改善表的訪問效率。