[TOC]
查看mysql中支持的全部存儲引擎:show engines
# innodb
他會把需要的熱數據和索引緩存在內存中
數據庫每個數據表的數據設計三方面信息:表結構、數據、索引
技術特點:支持事務、行級鎖定、外鍵
## 表結構,數據,索引的物理儲存
表結構文件
通過這個命令查看mysql的一些路徑
~~~
show variables like '%dir%';
~~~
然后到庫的文件夾下就可以看到有 .frm文件就是innodb
所有innodb表的數據和索引信息都存儲在一個文件中
~~~
show variables like 'innodb_file_per_table';
~~~
通過這個命令查看每個innodb表的 數據和索引會不會創建單獨的文件存儲,on就是會
設置變量,使得每個innodb表有獨特的數據和索引 存儲文件:
~~~
set global innodb_file_per_table=1;
~~~
.ibd 文件就是數據和索引都有獨立的存儲位置
## 數據存取順序
innodb表數據的存儲是按照主鍵的順序排列每個寫入的數據。
該特點決定了該類型表的寫入操作較慢。
## 事務,外鍵
該類型數據表支持事務、外鍵
事務:把許多寫入(增、改、刪)的sql語句捆綁在一起,要么執行、要么不執行
事務經常用于與“錢”有關的方面。
四個特性:原子、一致、持久、隔離
具體操作:
~~~
start transaction;
許多寫入sql語句
sql語句有問題
rollback;回滾
commit;提交
rollback和commit只能執行一個
~~~
外鍵:兩個數據表A和B,B表的主鍵是A表的普通字段,在A表看這個普通的字段就是該表的“外鍵”,外鍵的使用有”約束”。
約束:以上兩個表,必須先寫B表的數據,再寫A表的數據
并且 A表的外鍵取值必須來之B表的主鍵id值,不能超過其范圍。
真實項目里邊很少使用“外鍵”,因為有約束
## 并發性
該類型表的并發性非常高
多人同時操作該數據表
為了操作數據表的時候,數據內容不會隨便發生變化,要對信息進行“鎖定”
該類型鎖定級別為:行鎖。只鎖定被操作的當前記錄。
# Myisam
## 結構,數據,索引獨立存儲
~~~
*.frm:表結構文件
*.MYD:表數據文件
*.MYI:表索引文件
~~~
該類型的數據表 表結構、數據、索引 都有獨立的存儲文件
每個myisam數據表的 結構、數據、索引 都有獨立的存儲文件
特點:獨立的存儲文件可以單獨備份、還原。
數據穩定后可以壓縮數據信息
支持全文索引
## 數據存儲順序
myisam表數據的存儲是按照自然順序排列每個寫入的數據。
該特點決定了該類型表的寫入操作較快。
## 并發性
該類型并發性較低
該類型的鎖定級別為:表鎖
## 壓縮機制
如果一個數據表的數據非常多,為了節省存儲空間,需要對該表進行壓縮處理。
復制當前數據表的數據:
開始壓縮數據表的數據
//這里表名要帶路徑的F:\phpstudy\MySQL\data\php2\order3 表名order3前面帶路徑
壓縮工具:myisampack.exe 表名
重建索引:myisamchk.exe -rq 表名
解壓縮工具:myisamchk.exe --unpack 表名

或者
~~~
/usr/local/mysql/bin/myisampack myisam.MYI
# 中間可以跟參數-b -f
~~~
order3數據表有壓縮,但是索引沒有了:要重建索引

索引重建完畢
出現情況:
壓縮的數據表是只讀表,不能寫信息:
壓縮的數據表有特點:不能頻繁的寫入操作,只是內容固定的數據表可以做壓縮處理
存儲全國地區信息的數據表
收貨地址信息數據表
如果必須要寫數據:就解壓該數據表,寫入數據,再壓縮
解壓order3數據表,使得其可以寫入數據:
(解壓同時索引自動重建)

執行flush操作,更新解壓后的數據:flush table 表名; //這邊直接寫表名就可以不帶路徑
該操作同時會刪除order3.MYD.00996D46.deleted的壓縮備份文件
innodb存儲引擎:適合做修改、刪除
Myisam存儲引擎:適合做查詢、寫入
# Archive
歸檔型存儲引擎,該引擎只有寫入、查詢操作,沒有修改、刪除操作
比較適合存儲“日志”性質的信息。
特點:
* 以zlib對表數據進行壓縮,磁盤I/O更少
* 數據存儲在ARZ為后綴的文件中
* 只允許在自增ID列上加索引
# memory
內存型存儲引擎,操作速度非常快速,比較適合存儲臨時信息,
服務器斷電,給存儲引擎的數據立即丟失,表結構存在,表結構存在磁盤,表數據存在內存中。
支持hash索引和BTree索引,如果是等值查詢hash索引快,BTree索引范圍查找
所有字段都為固定長度varchar(10)=char(10) 就算寫varchar也是會變成定長的char
不支持BLOG和TEXT等大字段
使用表級鎖
不能存儲大量數據,最大大小由max_heap_table_size參數決定,對已經存在的memory類型的表不生效,除非重建
## 使用場景
* 用于查找或者映射表,例如郵編和地區的對應表
* 用于保存數據分析中產生的中間表
* 用于緩存周期性聚合數據的結果表
* 數據容易丟失,要求數據可再生
## 容易混合的概念
memory存儲類型的表 vs 臨時表
臨時表(2種,都是只對當前session可見)
1. 系統臨時使用的表(超過限制使用myisam臨時表,未超限制使用memory表)
2. create temporary teble 建立的臨時表
memory類型的表都是可見的
# 選擇引擎
## Myisam和innodb
Myisam崩潰后修復能力沒有innodb好
網站大多數情況下“讀和寫”操作非常多,適合選擇Myisam類型
例如 dedecms、phpcms內容管理系統(新聞網站)、discuz論壇
網站對業務邏輯有一定要求(辦公網站、商城)適合選擇innodb
Mysql5.5默認存儲引擎都是innodb的
Myisam和Innodb存儲引擎特點
### Myisam
表結構、數據、索引 分別有對應的存儲文件
寫入數據非常快,安裝自然順序寫入數據
數據穩定后可以壓縮數據信息
支持全文索引
并發性:少低,鎖表操作
### Innodb
表結構有單獨存儲文件,數據和索引共享同一個存儲文件(ibdata1、*.ibd)
ibdata1 是全部innodb表的數據和索引的存儲文件
*.ibd 是每個innodb表的數據和索引的存儲文件
支持事務和外鍵的
并發性:好,操作數據表時鎖定記錄(行)
Mysql5.6版本有支持全文索引
- SQL
- 名詞
- mysql
- 初識mysql
- 備份和恢復
- 存儲引擎
- 數據表損壞和修復
- mysql工具
- 數據庫操作
- 增
- 刪
- 改
- 查
- 數據類型
- 整數類型
- 小數類型
- 日期時間類型
- 字符和文本型
- enum類型
- set類型
- 時間類型
- null與not null和null與空值''的區別
- 數據表操作
- 創建
- 索引
- 約束
- 表選項列表
- 表的其他語句
- 視圖
- sql增刪改查
- sql增
- sql刪
- sql改
- sql查
- sql語句練習
- 連接查詢和更新
- 常用sql語句集錦
- 函數
- 字符函數
- 數值運算符
- 比較運算符與函數
- 日期時間函數
- 信息函數
- 聚合函數
- 加密函數
- null函數
- 用戶權限管理
- 用戶管理
- 權限管理
- pdo
- 與pdo相關的幾個類
- 連接數據庫
- 使用
- pdo的錯誤處理
- pdo結果集對象
- pdo結果集對象常用方法
- pdo預處理
- 常用屬性
- mysql編程
- 事務
- 語句塊
- mysql中的變量
- 存儲函數
- 存儲過程
- 觸發器
- mysql優化
- 存儲引擎
- 字段類型
- 三范式和逆范式
- 索引
- 查詢緩存
- limit分頁優化
- 分區
- 介紹
- 分區算法
- list分區
- range范圍
- Hash哈希
- key鍵值
- 分區管理
- 特別注意
- 分表
- 數據碎片與維護
- innodb表壓縮
- 慢查詢
- explain執行計劃
- count和max,groupby優化
- 子查詢優化
- mysql鎖機制
- 介紹
- 演示
- 總結
- 樂觀鎖和悲觀鎖
- 扛得住的mysql
- 實例和故事
- 系統參數優化
- mysql體系結構
- mysql基準測試
- 索引
- mysql的復制
- win配置MySQL主從
- mysql5.7新特性
- 常見問題
- general log
- 忘記密碼
- uodo log與redo log
- 事務隔離級別
- mysql8密碼登錄
- explain
- 高效的Tree表
- on delete cascade 總結
- mongod
- 簡介
- 集合文檔操作語句
- 增刪改查
- 索引
- 數據導入和導出
- 主從復制
- php7操作mongod
- 權限管理
- redis
- redis簡介
- 3.2版本配置文件
- 3.0版本配置文件
- 2.8版本配置文件
- 配置文件總結
- 外網連接
- 持久化
- RDB備份方式保存數據
- AOF備份方式保存數據
- 總結
- win安裝redis和sentinel部署
- 事務
- Sentinel模式配置
- 分布式鎖
- 管道
- php中redis代碼
- 發布訂閱
- slowlog
- Redis4.0
- scan和keys
- elasticsearch
- 配置說明
- 啟動
- kibana
- kibana下載
- kibana配置文件
- kibana常用功能
- 常用術語
- Beats
- Beats簡介
- Filebeat
- Packetbeat
- Logstash
- 配置
- elasticsearch架構
- es1.7
- head和bigdesk插件
- 插件大全
- 倒排索引
- 單模式下API增刪改查
- mget獲取多個文檔
- 批量操作bulk
- 版本控制
- Mapping映射
- 基本查詢
- Filter過濾
- 組合查詢
- es配置文件
- es集群優化和管理
- logstash
- kibana
- es5.2
- 安裝
- 沖突處理
- 數據備份
- 缺陷不足
- 集群管理api
- 分布式事務
- CAP理論
- BASE模型
- 兩階段提交(2PC)
- TCC (Try-Confirm-Cancle)
- 異步確保型
- 最大努力通知型
- 總結