MySQL邏輯架構:
並發控制:由鎖實現
讀鎖:也叫共用鎖定,讀鎖互相不阻塞。A加鎖表後A,b,c,d都能讀該表但不能寫該表。
寫鎖:也叫獨佔鎖定,寫鎖相互阻塞。A加獨佔鎖定後,其他線程不能讀寫該表。
鎖粒度:
表鎖:鎖一個表,並發粒度小。代表格儲存體引擎MyISAM
行鎖:鎖一行資料,並發粒度大,並行作業表效能好。代表格儲存體引擎InnoDB。鎖粒度小系統對鎖的開銷也大。
假如給一個表加讀鎖,那麼其他線程也無法對該表進行寫操作了,如果是加行鎖那麼該線程只阻塞只對這一行資料的讀寫,表中其他行的資料其他線程可以讀寫,提高並發效能。
事務:相當於把N條語句打包成一條語句,這個包中的N條語句全部執行成功則成功,如果有其中一條語句沒有執行成功則交易回復到原先狀態事務執行失敗不寫入硬碟。
ACID(atomicityconsistency isolation durability)原子性,一致性,隔離性,持久性。是事務儲存引擎的特性。
原子性:事務相當於一個N條語句的包,要麼全部執行成功,要麼則失敗,對於事務來說不能成功執行一個事務的一部分,這就是原子性。
一致性:從一個一致的狀態轉換到另一個一致的狀態。要麼成功轉換為成功的狀態,要麼失敗復原為原來的狀態。
隔離性:A事務看不到B事務。
持久性:事務執行成功則寫入硬碟,這就是叫持久性。
儲存引擎:
·資料庫存在目錄中,庫中的表存在該目錄下。
·查看儲存引擎:show table status like ‘table_name’ G;
MyISAM儲存引擎
·將表存在3個檔案中.MYD存資料.MYI存索引.frm存表定義。
·支援表鎖
·myisam表很大時更容易出現故障,需要手工進行修複表,並且修複時間會非常漫長。修複表步驟:檢查表,然後修複表。
·壓縮表
InnoDB
·將表存在2個檔案中ibdata1資料檔案和資料庫目錄下的.frm表定義檔案。
·支援事務
·支援行鎖
·外鍵約束
·基於聚簇索引建立的,聚簇索引對主鍵查詢效能非常高。
·InnoDB支援熱備份,而其他所有儲存引擎都不支援熱備份。
選擇合適的儲存引擎:
·MySQL5.5預設儲存引引擎為InnoDB,最簡單的答案是如果你不知道該選用何種儲存引擎那麼你就用InnoDB,因為它支援事務並且效能好。有些人說MyISAM效能比InnoDB快,這可不一定,書中說很多時候InnoDB讓MyISAM望塵莫及。
選擇依據:
1、事務:InnoDB支援事務,MyISAM不是事務型儲存引擎。
2、InnoDB支援線上熱備份。
3、崩潰恢複,InnoDB是事務型儲存引擎支援,MyISAM崩潰後修複一個大的表是非常慢的。
4、特有特性,比如聚簇索引,外鍵約束,行鎖等等。
如果對資料安全性要求不高,並且主要讀取的並且資料庫表不是很大的情境下應用MyISAM。
資料量非常大那麼還是用InnoDB吧,當讀寫非常頻繁時候行級鎖效能更好。