14.1 Introduction to InnoDB 介紹InnoDB
InnoDB是一個通用的存儲引擎,它平衡了高可靠性和高性能。
在MySQL 5.6,InnoDB 是默認的MySQL storage engine.
除非你配置一個不同的 default storage engine, 執行一個CREATE TABLE statement without an ENGINE= clause creates an InnoDB table.
InnoDB 包含所有的InnoDB插件的功能
注意:
mysql和INFORMATION_SCHEMA databases,mysql 內部一些實現仍舊使用MyISAM
你不能切換grant表來使用InnoDB
InnoDB的主要優勢
DML操作尊重ACID模型,事務具有提交,回滾 和crash-recovery功能來保護我們的數據
行級鎖和Oracle風格的一致性讀 增加了多用戶併發性和性能
InnoDB 表整理你的數據來優化查詢基於主鍵
每個InnoDB 表有一個主鍵索引稱爲 clustered index 組織數據以最小化I/O 用於主鍵查找
14.1.1 Benefits of Using InnoDB Tables 從InnoDB表中收益
你可能會發現InnoDB表有以下好處:
如果你的server crash 因爲硬件或者軟件問題,不管當時數據庫中發生了什麼,
你不需要進行任何操作在重啓數據庫後
InnoDB crash recovery 自動確定 任何改變在crash時間點前提交的
回滾任何改變 沒有提交的
InnoDB 存儲引擎 維護自己的buffer pool ,當數據被訪問時 cache表和索引數據在主內存裏。
頻繁使用的數據是直接從內存裏處理。
這個緩存應用任何類型的信息加速處理 在專用數據庫上,多達80%的物理內存通常分配給緩衝池。
如果你將相關的數據拆分到不同的表,你可以設置外鍵來強制引用完整性
如果數據在磁盤或者內存中損壞,一個checksum 機制提醒你在你使用數據前
當你設計你的數據使用合適的主鍵列, 操作調用那些列是被自動優化的。
它是非常快的 引用主鍵列 在WHERE 條件 ORDER BY列 GROUP BY列
Inert,updates,和delete 是通過一個自動機制優化的稱爲change buffering
InnoDB 不僅允許併發讀和寫訪問相同的表
性能優化不僅限於 長時間運行查詢的大表
當相同的記錄是一遍又一遍的被訪問 一個功能稱爲自適應Hash Index
將接管這些查詢 ,使其更快, 就好像他們是從hash表中出來的一樣
你可以壓縮表和相關的索引
你可以創建和刪除索引 對性能影響最小
truncate一個 file-per-table tablespace 是非常快的
可以釋放操作系統的磁盤空間來重用,相比釋放空間 使用syste tablespace 只能InnoDB能重用
對於BLOB和long text 字段 存儲佈局對於表數據是更加高效的,使用動態行格式
你可以通過查詢INFORMATION_SCHEMA 表 來監控內部存儲引擎的工作