1. 程式人生 > >【mysql】儲存引擎

【mysql】儲存引擎

一MySql儲存引擎

1.1 什麼是儲存

外掛式儲存引擎是mysql最重要的特性之一。使用者可以根據需要選擇如何儲存和索引資料。是否使用事務等。Mysql預設支援多種儲存引擎,以適用不同領域的資料需求。使用者可以使用不同的儲存引擎來提高應用的效率。

 

1.2 儲存引擎變更

 

在建立表的時候指定儲存引擎和表的字符集編碼,當然如果不指定儲存引擎,資料庫會選用預設的儲存引擎的方式進行儲存。

 alter table ai engine = innodb;

通過如上所示的sql可以改變表的儲存引擎。

1.3 儲存引擎的比較

1.4 MyISAM 儲存引擎

MyISAM  不支援事務、也不支援外來鍵,其優勢是訪問的速度快,對事務完整性沒有要求或者以 SELECT、INSERT 為主的應用基本上都可以使用這個引擎來建立表。

MyISAM 的表又支援 3 種不同的儲存格式: 靜態(固定長度)表,動態表,壓縮表。

靜態表是預設的儲存格式。一般選用靜態表,如果選用動態表的話需要定期的通過OPTIMIZE TABLE命令整理記憶體中的碎片。

1.4.1 靜態表優點

靜態表中的欄位都是非變長欄位,這樣每個記錄都是

固定長度的,這種儲存方式的優點是儲存非常迅速,容易快取,出現故障容易恢復;

1.4.2 靜態表缺點

佔用的空間通常比動態表多。靜態表的資料在儲存的時候會按照列的寬度定義補足空格,但

是在應用訪問的時候並不會得到這些空格,這些空格在返回給應用之前已經去掉。

 

1.5 InnoDB

InnoDB 儲存引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比 MyISAM

的儲存引擎,InnoDB 寫的處理效率差一些並且會佔用更多的磁碟空間以保留資料和索引。

在使用InnoDB引擎的時候可以設定自增長,並且通過“ALTER TABLE *** AUTO_INCREMENT = n;對資料庫自增長的初始值,進行調整。

對於 InnoDB 表,自動增長列必須是索引。如果是組合索引,也必須是組合索引的第一

列,但是對於 MyISAM 表,自動增長列可以是組合索引的其他列,這樣插入記錄後,自動增長列是按照組合索引的前面幾列進行排序後遞增的。

    MySQL 支援外來鍵的儲存引擎只有 InnoDB,在建立外來鍵的時候,要求父表必須有對應的

索引,子表在建立外來鍵的時候也會自動建立對應的索引。

 

1.5.1 建立外來鍵

CREATE TABLE city (

 city_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,

 city VARCHAR(50) NOT NULL,

 country_id SMALLINT UNSIGNED NOT NULL,

 last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

 PRIMARY KEY (city_id),

 KEY idx_fk_country_id (country_id),

 CONSTRAINT `fk_city_country` FOREIGN KEY (country_id) REFERENCES country (country_id) ON

DELETE RESTRICT ON UPDATE CASCADE

)ENGINE=INNODB DEFAULT CHARSET=utf8;

1.5.2 外來鍵約束

RESTRICT: 限制字表有關聯記錄的情況下父表不能更新,主要體現在刪除上。

CASCADE: 表示父表在更新或者刪除時,更新或者刪除子表對應記錄。

SET NULL: 表示父表在更新或者刪除的時候,子表的對應欄位被 SET NULL。

NO ACTION:其中 RESTRICT 和 NO ACTION 相同,限制字表有關聯記錄的情況下父表不能更新,主要體現在刪除上。

例如 建立表

這個主表是country,副表示city。

在執行刪除操作的時候受到了相應的約束。

 

1.6 選擇儲存引擎

MyISAM:預設的 MySQL 外掛式儲存引擎。如果應用是以讀操作和插入操作為主只有很少的更新和刪除操作,並且對事務的完整性、併發性要求不是很高,那麼選擇這個儲存引擎是非常適合的。MyISAM 是在 Web、資料倉儲和其他應用環境下最常使用的儲存引擎

之一。

InnoDB:用於事務處理應用程式,支援外來鍵。如果應用對事務的完整性有比較高的要求,在併發條件下要求資料的一致性,資料操作除了插入和查詢以外,還包括很多的更新、刪除操作,那麼 InnoDB 儲存引擎應該是比較合適的選擇。InnoDB 儲存引擎除了有效地降低由於刪除和更新導致的鎖定,還可以確保事務的完整提交(Commit)和回滾(Rollback),

對於類似計費系統或者財務系統等對資料準確性要求比較高的系統,InnoDB 都是合適的選

擇。

MEMORY:將所有資料儲存在 RAM 中,在需要快速定位記錄和其他類似資料的環境下,可提供極快的訪問。MEMORY 的缺陷是對錶的大小有限制,太大的表無法 CACHE 在記憶體中,其次是要確保表的資料可以恢復,資料庫異常終止後表中的資料是可以恢復的。MEMORY 表通常用於更新不太頻繁的小表,用以快速得到訪問結果。

 

MERGE:用於將一系列等同的 MyISAM 表以邏輯方式組合在一起,並作為一個物件

引用它們。MERGE 表的優點在於可以突破對單個 MyISAM 表大小的限制,並且通過將不同

的表分佈在多個磁碟上,可以有效地改善MERGE表的訪問效率。這對於諸如資料倉儲等VLDB

環境十分適合

 

對於字符集

  校對規則命名約定:它們以其相關的字符集名開始,通常包括一個語言名,並且以_ci
(大小寫不敏感)、_cs(大小寫敏感)或_bin(二元,即比較是基於字元編碼的值而與language
無關)結束。