mysql 數(shù)據(jù)庫存儲引擎

Mysql5.7支持的存儲引擎有: InnoDB,MyISAM,Memory,Merge,Archive,Federated,CSV,BLACKHOLE等

可以使用SHOW ENGINES語句查看系統(tǒng)所支持的引擎類型

+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 行于數(shù)據(jù)集 (0.01 秒)

Support列的值表示某種引擎是否能使用; YES表示可以使用,No表示不能使用,Default表示該引擎為當前默認存儲引擎.

InnoDB存儲引擎

ACID,指數(shù)據(jù)庫事務正確執(zhí)行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。一個支持事務(Transaction)的數(shù)據(jù)庫,必須要具有這四種特性,否則在事務過程(Transaction processing)當中無法保證數(shù)據(jù)的正確性,交易過程極可能達不到交易方的要求。

InnoDB是事物型數(shù)據(jù)庫的首選引擎,支持事物安全表(ACID),支持行鎖定和外鍵。Mysql5.5.5之后,InnoDB作為默認存儲引擎,

  1. InnoDB 給Mysql提供了具有提交,回滾和崩潰恢復能力的事物安全(ACID兼容)存儲引擎。InnoDB鎖定在行級并且也在select語句中提供了一個類似Oracle的非鎖定讀。這些功能增加了多用戶部署和性能。在sql查詢中,可以自由的將InnoDB類型的表與其他Mysql的表的類型混合起來,甚至在同一個查詢中也可以混合。
  2. InnoDB是為處理巨大數(shù)據(jù)量的最大性能設計.它的CPU效率可能是任何其他基于磁盤的關系數(shù)據(jù)庫引擎所不能匹敵的。
  3. InnoDB存儲引擎完全與MYSQL服務器整合,InnoDB存儲引擎為在主內(nèi)存中緩存數(shù)據(jù)和索引而維持它自己的緩沖池。InnoDB將它的表和索引存在一個邏輯空間中,表空間可以包含數(shù)個文件。這與MyISAM表不同,比如在MyISAM表中每個表被存在分離的文件中。InnoDB表可以是任何尺寸,即使在文件尺寸被限制在2GB的操作系統(tǒng)上
  4. InnoDB支持外鍵完整性約束(FOREIGN KEY)
    存儲表中的數(shù)據(jù)時,每張表的存儲都按主鍵順序存放 如果沒有顯示在表定義時指定主鍵,InnoDB會為每一行生成一個6B的ROWID 并以此作為主鍵
  5. InnoDB被用在眾多需要高新能的大型數(shù)據(jù)庫站點上
    InnoDB 不創(chuàng)建目錄 使用InnoDB時 mysql將在mYSQL數(shù)據(jù)目錄下創(chuàng)建一個名為ibdata1的10MB大小的自動拓展數(shù)據(jù)文件,以及兩個名為ib_logfile0和ib_logfile1的5MB大小的日志文件

MyISAM存儲引擎

MyISAM基于ISAM的存儲引擎,并對其進行拓展.它是在Web,數(shù)據(jù)存儲和其他應用環(huán)境下最常使用的存儲引擎之一。MyISAM擁有較高的插入,查詢速度,但不支持事物。其主要特性有

  1. 大文件(達63位文件長度)在支持大文件的文件系統(tǒng)和操作系統(tǒng)上被支持
  2. 當吧刪除,更新及插入操作混合使用的時候,動態(tài)尺寸的行產(chǎn)生更少碎片。這要通過合并相鄰被刪除的快,以及若下一個塊被刪除 就拓展下一塊來自動完成
  3. 每個MyISAM表最大索引數(shù)是64 這可以通過重新編譯來改變每個索引最大的列數(shù)是16個
  4. BLOB和TEXT列可以被索引
  5. 最大的鍵長度為1000B 這也可以用個編譯來改變 對于鍵長度超過250B的情況,一個超過1024B的鍵將被用上
  6. NULL值被允許在索引的列中,這個值占每個鍵的0~1個字節(jié)
  7. 所有數(shù)字鍵值以高字節(jié)優(yōu)先被存儲以允許一個更高的所有壓縮
  8. 每表一個auto_increment列的內(nèi)部處理,MyISAM為insert何update操作自動更新這一列。這使得auto_increment列更快(至少10%), 在序列頂?shù)闹当粍h除之后就不能再利用。
  9. 可以把數(shù)據(jù)文件和索引文件放在不同目錄
  10. 每個字符列可以有不同的字符集
  11. 有varchar的表可以固定或動態(tài)記錄長度
  12. varchar和char列可以多達64KB
    使用myisam引擎創(chuàng)建數(shù)據(jù)庫,將產(chǎn)生3個文件。文件的名字以表的名字開始,拓展名指出文件類型;frm文件存儲表定義,數(shù)據(jù)文件的拓展名為.myd(mydata),索引文件的拓展名是.myi(myindex)

MEMORY存儲引擎

Memory 存儲引擎將表中的數(shù)據(jù)存儲到內(nèi)存中,為查詢和引用其他表數(shù)據(jù)提供快速訪問。其主要特性有;

  1. memory表的每個表可以有多達32個索引,每個索引16列,以及500B的最大鍵長度
  2. 存儲引擎執(zhí)行HASH 和BTREE索引
  3. 可以在一個memory表中有非唯一鍵
  4. MEMORY不支持BLOB或TEXT列
  5. MEMORY表使用一個固定的記錄長度格式
  6. Memory支持AUTO_INCREMENT列和對包含nULL值的列的索引
  7. MEMORY表在所有客戶端之間共享(就像其他任何非Tempopary標)
  8. Memory表內(nèi)容被存在內(nèi)存中,內(nèi)存是Memory表和服務器在查詢處理時的空閑中創(chuàng)建的內(nèi)部表共享
  9. 當不再需要Memory表的內(nèi)容時 要釋放被Memory表使用的內(nèi)存 應該執(zhí)行DELETE FROM或TRUNCATE TABLE,或者刪除整個表(DROP TABLE)

存儲引擎的選擇

存儲引擎比較

功能 MyISAM Memory InnoDB Archive
存儲限制 256TB RAM 64TB None
支持事物 NO NO YES NO
支持全文索引 YES NO NO NO
支持數(shù)索引 YES YES YES NO
支持哈希索引 NO YES NO NO
支持數(shù)據(jù)緩存 NO N/A YES NO
支持外鍵 NO NO YES NO
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容