1.mysql的逻辑架构
1.最上面这部分并不是mysql独有的,大多数基于网络的客户端/服务器的工具或者服务都有类似的框架,例如连接处理,授权认证,安全。
2.mysql的核心服务功能都在中间这一层,包括查询解析,分析,优化,缓存,内置函数,所有跨存储引擎的功能都在这一层实现:存储过程,触发器,视图。
3.第三层为存储引擎。存储引擎负责mysql数据的存储和提取。
1.1优化与执行
MySql会解析查询,并创建内部数据结构,然后对其进行各种优化,例如重写查询,决定表的读取顺序,以及选择合适的索引等。用户可以通过特殊的关键字提示优化器,影响它的决策过程。也可以请求优化器解释优化过程中各个因素。
优化器比不关心表示用的是什么存储引擎。但存储引擎对优化查询有影响。
2.mysql存储引擎
使用SHOW TABLE STATUS LIKE 'test'可以查看test表的信息
Name:表名。
Engine:表的存储引擎类型
Row_format:行的格式
Rows:表中的行数
Avg_row_length:平均每行包含的字节数
Data_length:表数据的大小
Max_data_length:表的最大容量
Index_length:所以的大小
data_free:已分配但没有使用的空间
Auto_increment:下一个auto_increment的值
Create_time:创建表的时间
Update_time:最后一次更新表的时间
Check_time:最后一次检查表的时间
Collection:默认字符集和字符列排序规则
Checksum:如果有,表示表的实时校验和
Create_options:创建表示指定的其他选项。
Comment:该列包含了一些其他的额外信息。
1.InnoDB存储引擎
这个是mysql的默认事务引擎,也是最重要,使用最广泛的存储引擎。它被设计来处理大量的短期事务,短期事务大多数情况是正常提交很少回滚的。有自动崩溃回复特性。
默认的隔离级别是REPEATABLE READ(可重复读)。
2.MyISAM存储引擎
mysql5.1及以前的默认存储引擎,不支持事务和行级锁。崩溃后无法安全修复。
3.转换表的引擎
3.1alter table
ALTER TABLE test ENGINE=InnoDB
可以使用任何引擎,但是执行时间很长。因为mysql是把表的内容复制到一张新表中,同时原表会加锁读锁,转换表的引擎会失去一些特性,比如表的外键将丢失。
3.2导入导出
把表数据导出,然后在文件中修改表的存储引擎和表名,因为一个数据库表的名字不能相同,即时是不同的存储引擎。而在文件中create table之前会drop table要小心。
3.3创建与查询
CREATE TABLE test LIKE old_table
alter table test ENGINE=InnoDB
insert into test select * from old_table