[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 表名
![](https://box.kancloud.cn/726875fb98837d3ed82e081799111f31_1076x316.jpg)
或者
~~~
/usr/local/mysql/bin/myisampack myisam.MYI
# 中间可以跟参数-b -f
~~~
order3数据表有压缩,但是索引没有了:要重建索引
![](https://box.kancloud.cn/00b7620b78a5f5479f41c92c1b8c2bdf_1078x202.jpg)
索引重建完毕
出现情况:
压缩的数据表是只读表,不能写信息:
压缩的数据表有特点:不能频繁的写入操作,只是内容固定的数据表可以做压缩处理
存储全国地区信息的数据表
收货地址信息数据表
如果必须要写数据:就解压该数据表,写入数据,再压缩
解压order3数据表,使得其可以写入数据:
(解压同时索引自动重建)
![](https://box.kancloud.cn/506fe926a012eabc27d4027421b69b60_1080x174.jpg)
执行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)
- 异步确保型
- 最大努力通知型
- 总结