## innodb引擎
大于等于5.5 版本中默認的存儲引擎,MySql推薦使用的存儲引擎。提供事務,行級鎖定,外鍵約束的存儲引擎。
事務安全型存儲引擎,更加注重數據的完整性和安全性。
### 存儲格式
innodb存儲引擎 : **每個數據表**有單獨的“結構文件” *.frm ;
數據,索引集中存儲,存儲于同一個**表空間文件**中ibdata1。


innodb表空間文件:存儲innodb的數據和索引。
默認情況下,所有的 innodb表的數據和索引在同一個表空間文件中,**通過配置可以達到每個innodb的表對應一個表空間文件**。
語法:
~~~
show variables like "innodb_file_per_table";
~~~
~~~
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | OFF |
+-----------------------+-------+
~~~
開啟該配置:
~~~
set global innodb_file_per_table=1;
~~~
~~~
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
~~~
系統配置參數innodb_file_per_table后期無論發生任何變化,在開啟下創建的表都有自己獨立的“數據/索引”文件。

#### 注意
innodb數據表不能直接進行文件的復制/粘貼進行備份還原,可以使用如下指令:
~~~
> mysqldump -uroot -p密碼 數據庫名稱 > f:/文件名稱.sql [備份]
~~~
~~~
> mysql -uroot -p密碼 數據庫 < f:/文件名稱.sql [還原]
~~~
### 數據按照主鍵順序存儲
innodb數據表,數據的**寫入順序** 與 **存儲的順序**不一致,需要按照主鍵(**如何有主鍵的話**)的順序把記錄**擺放到**對應的位置上去,速度比Myisam的要**稍慢**。
創建一張表 :
~~~
create table test(
id int auto_increment primary key,
name varchar(20) not null,
);
~~~
插入數據
~~~
insert into test values(100,'1'),(50,'2'),(1,'3'),(1000,'4');
~~~
查看結果
~~~
+------+------+
| id | name |
+------+------+
| 1 | 3 |
| 50 | 2 |
| 100 | 1 |
| 1000 | 4 |
+------+------+
~~~
插入時做排序工作,效率低。
#### 并發處理
1. 擅長處理并發。
2. 行級鎖定(row-level locking),實現了行級鎖定,在一定情況下,可以選擇行級鎖來提升并發性,也支持表級鎖定,innodb根據操作選擇。
3. 多版本并發控制,MVCC,效果達到無阻塞讀操作。
#### 鎖機制
當客戶端操作表(記錄)時,為了保證操作的隔離性(多個客戶端操作不能相互影響),通過加鎖來處理。
**操作 :**
**讀鎖** : 讀操作時增加的鎖,也叫共享鎖,S-lock。特征是所有人都只可以讀,只有釋放鎖之后才可以寫。
**寫鎖**:寫操作時增加的鎖,也叫獨占鎖或排他鎖,X-lock。特征,只有鎖表的客戶可以操作(讀寫)這個表,其他客戶讀都不能讀。
**鎖定粒度(范圍)**
**表級鎖**:開銷小,加鎖快,發生鎖沖突的概率最高,并發度最低。myisam和innodb都支持。
**行級鎖**:開銷大,加鎖慢,發生鎖沖突的概率最低,并發度也最高。innodb支持
**Tips:默認情況,表鎖和行鎖都是自動獲得的,不需要額外的命令。**
- MySQL優化概述
- 存儲引擎的選擇
- innodb引擎
- myisam引擎
- memory引擎
- 查詢需優化語句
- 通用查詢日志
- 慢查詢日志
- profile機制
- 索引
- 索引基本介紹
- 索引類型
- 索引管理語法
- 創建索引主要事項
- 執行計劃
- 查看索引類型
- myisam索引數據結構
- innodb索引數據結構
- 索引覆蓋
- 索引使用原則
- 列獨立
- like查詢
- 復合索引使用
- or運算都具有索引
- mysql智能選擇
- 優化group by語句
- 前綴索引
- 全文索引
- 查詢緩存
- 查詢緩存操作
- 無緩存
- limit分頁優化
- 分區
- 分區介紹
- list分區
- range分區
- hash分區
- key(鍵值)分區
- 分區管理
- 分表
- 分表介紹
- 水平分表
- 垂直分表
- MySQL鎖機制
- 鎖機制介紹
- 鎖的幾種形式
- 表鎖操作
- 行鎖操作
- 數據碎片與維護
- 范式
- 第一范式
- 第二范式
- 第三范式
- 反三范式
- 主從復制
- 介紹
- 讀寫分離