場景
資料庫儲存引擎
資料庫儲存引擎是資料庫底層軟體元件,資料庫管理系統(DBMS )使用資料引擎進行建立、查詢、更新和刪除資料的操作。
不同的儲存引擎提供不同的儲存機制、索引技巧、鎖定水平等功能,使用不同的儲存引擎還可以獲得特定的功能。
現在許多資料庫管理系統支援多種資料引擎。 MySQL 的核心就是儲存引擎。
MySQL 提供了多種不同的儲存引擎,包括處理事務安全表的引擎和處理非事務安全表的引擎。
在 MySQL中不需要在整個伺服器中使用同一種儲存引擎,可以針對具體的要求對每一個表使用不同的儲存引擎。
MySQL支援的儲存引擎有InnoDB、MyISAM、Memory、Merge、 Archive 、Federated、CSV、BLACKHOLE等。
使用者可以使用 SHOW ENGINES 語句檢視系統支援的引擎型別。
注:
部落格:
https://blog.csdn.net/badao_liumang_qizhi
實現
InnoDB儲存引擎
InnoDB 是事務型資料庫的首選引擎,支援事務安全表( ACID ),支援行鎖定和外來鍵。
MySQL 的預設儲存引擎為 InnoDB, InnoDB 的主要特點如下:
(1) InnoDB給MySQL 提供了具有提交、回滾和崩潰恢復能力的事務安全(ACID 相容)儲存引擎。
InnoDB 鎖定在行級,並且也用 SELECT 語句提供一個類似 Oracle 的非鎖定讀。
這些功能增加了多使用者部署和效能。
在SQL 查詢中可以自由地將 InnoDB 型別的表與 MySQL 其他型別的表混合起來,甚至在同一個查詢中也可以混合。
(2) InnoDB 是為處理巨大資料量時的最大效能設計,它的 CPU 效率可能是任何其他基於磁碟的關聯式資料庫引擎所不能匹敵的。
(3) InnoDB 儲存引擎被完全與 MySQL 伺服器整合, InnoDB儲存引擎為在主記憶體中快取資料和索引而維持它自己的緩衝池。
InnoDB 的表和索引在一個邏輯表空間中, 表空間可以包含數個檔案(或原始碰盤分割槽)。
這與 MyISAM 表不同,比如在 MyISAM 表中每個表被儲存在分離的檔案中。 InnoDB 表可以是任何尺寸,
即使在檔案尺寸被限制為 2GB 的作業系統上。
(4) InnoDB支援外來鍵完整性約束(FOREIGN KEY)。在儲存表中的資料時每張表的儲存都按主鍵順序存放,
如果沒有顯式地在定義表時指定主鍵, lnnoDB 會為每一行生成一個6位元組的 ROWID ,並以此作為主鍵。
(5) InnoDB被用來在眾多需要高效能的大型資料庫站點上。InnoDB 不建立目錄,
在使用 InnoDB時MySQL 將在 MySQL 資料目錄下建立一個名為ibdatal的10MB 大小的自動擴充套件資料檔案,
以及兩個名為ib _logfile()和ib_ logfilel的5MB大小的曰志檔案。
MyISAM儲存引擎
MyISAM 基於 ISAM 儲存引擎,並對其進行擴充套件。它是在 Web 、資料倉儲和其他應用環境下最常使用的儲存引擎之一。
MyISAM 擁有較高的插 入、查詢速度,但不支援事務。
MyISAM 的主要特點如下:
(1)大檔案(達 63 位檔案長度)在支援大檔案的檔案系統和作業系統上被支援。
(2)當把刪除、更新及插入混合的時候,動態尺寸的行的碎片更少,這要透過合併相鄰被刪除的塊來完成,
若下一個塊被刪除,則擴充套件到下一塊自動完成。
(3)每個 MyISAM 表的最大索引數是 64,這可以透過重新編譯來改變。每個索引最大的列數是 16 個。
(4)最大的鍵長度是 1000 位元組,這也可以透過編譯來改變。對於鍵長度超過 25 位元組的情況,使用一個超過 1024 位元組的鍵塊。
(5) BLOB TEXT 列可以被索引。
(6) NULL 被允許在索引的列中,其佔每個鍵的0-1位元組。
(7)所有數字鍵值先以高位元組位被儲存,以允許一個更高的索引壓縮。
(8)對於每個表的 AUTO_INCREMENT列, MyISAM 透過 INSERT UPDATE 操作自動更新這一列,
這使得 AUTO MENT 列更快(至少 10% )。注意,在序列項的值被刪除之後就不能再利用。
(9)可以把資料檔案和索引檔案放在不同目錄。
(10)每個字元列可以有不同的字符集。
(11)有VARCHAR 的表可以有固定或動態記錄長度。
(12)VARCHAR和CHAR 列可以多達 64KB。
使用 MyISAM引擎建立資料庫將產生3個檔案,檔案的名字以表的名字開始,副檔名指出檔案型別。
fun檔案儲存表定義,資料檔案的副檔名為.myd ( MYData ),索引檔案的副檔名為 .myi (MYindex)。
MEMORY儲存引擎
MEMORY 儲存引擎將表中的資料儲存在記憶體中,為查詢和引用其他表中的資料提供快速訪問。
MEMORY 的主要特點如下:
(1)MEMORY表可以有多達每個表 32 個索引,每個索引 16 列, 以及 500 位元組的最大鍵長度。
(2)MEMORY儲存引擎執行 HASH和BTREE 索引。
(3)可以在一個MEMORY 表中有非唯一鍵。
(4)MEMORY表使用一個固定的記錄長度格式。
(5)MEMORY不支援 BLOB或TEXT列。
(6)MEMORY支援 AUTO_INCREMENT 列和對可包含 NULL 值的列的索引。
(7)MEMORY表在所有客戶端之間共享(就像其他任何非TEMPORARY表)。
(8)MEMORY 表內容被存在記憶體中,記憶體是MEMORY表和伺服器在查詢處理的空閒中建立的內部表共享。
(9)當不再需要 MEMOR 表的內容時要釋放被 MEMORY 表使用的記憶體,應該執行
DELETE FROM 或 TRUNCATE TABLE,或者整個地刪除表(使用 DROP TABLE)。
儲存引擎的選擇
不同的儲存引擎有不同的特點,適用於不同的需求,為了做出正確的選擇,
使用者首先需要考慮每個儲存引擎提供了哪些不同的功能。
如果要提供提交、回滾和崩潰恢復能力的事務安全(ACID 相容)能力,並要求實現併發控制,InnoDB是個很好的選擇。
如果資料表主要用來插入和查詢記錄,則MyISAM 引擎能提供較高的處理效率。
如果只是臨時存放資料,資料量不大,並且不需要較高的資料安全性,可以選擇將資料儲存在記憶體中的 Memory引擎,
在MySQL 中使用該引擎作為臨時表存放查詢的中間結果。
如果只有 INSERT和SELECT 操作,可以選擇 Archive 引擎 ,Archive 引擎支援高併發的插入操作 但是本身並不是事務安全的。
Archive 引擎非常適合儲存歸檔資料 例如記錄日誌資訊可以使用 Archive 引擎。
具體使用哪一種引擎要根據需要靈活選擇,一個資料庫中的多個表可以使用不同引擎以滿足各種效能和實際需求,
使用合適的儲存引擎將會提高整個資料庫的效能。
Mysql更改表的儲存引擎
ALTER TABLE fruit ENGINE=MyISAM;
Mysql檢視系統所支援的儲存引擎型別
SHOW ENGINES;
Mysql檢視當前預設的儲存引擎
SELECT @@default_storage_engine;
Mysql檢視特定庫中所有表的儲存引擎
SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = '資料庫名';
Mysql檢視單個表的儲存引擎
SHOW TABLE STATUS LIKE 'fruit';