Mysql常用的存储引擎
Posted 不懂123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql常用的存储引擎相关的知识,希望对你有一定的参考价值。
mysql通信架构
1.最上层是各种应用程序的连接数据库的驱动程序
2.Mysql在连接池中分配一个线程来处理客户端的连接请求
3.连接的安全合法性验证
并发连接数不能太大,是整个系统的性能瓶颈
4.SQL Interface sql接口 检查客户端发送过来的sql语句是否符合sql语法
5.Parser sql解析器 把验证过的sql语句进行优化同时检查用户是否有查询或者执行权限
6.Optimlzer sql执行计划 选择一条找到数据的最佳路径
7.返回数据同时缓存查询结果
Myql查询的执行路径
1.客户端发送执行查询sql语句
2.mysql服务端接收到sql语句后首先查询缓存
缓存是基于hash运算来查找的,所以要求sql语句的字符要一模一样
3.如果没有缓存 则把sql语句发送到解析器
4.优化解析后sql 找到最佳执行路径
5.执行sql语句 返回查询结果
MyISAM存储引擎
不支持事务
表级锁定
读写相互阻塞,写入不能读,读时不能写
只缓存索引
不支持外键约束
不支持聚簇索引
读取数据较快,占用资源较少
不支持MVCC(多版本并发控制机制)高并发
崩溃恢复性较差
MySQL5.5.5前默认的数据库引擎
适用场景:只读(或者写较少),表较小(可以接受长时间进行修复操作)
MyISAM引擎文件:
tbl_name.frm: 表格式定义
tbl_name.MYD: 数据文件
tbl_name.MYI: 索引文件
InnoDB引擎特点
支持事务,适合处理大量短期事务
行级锁
读写阻塞与事务隔离级别相关
可缓存数据和索引
支持聚簇索引
崩溃恢复性更好
支持MVCC高并发
从MySQL5.5后支持全文索引
从MySQL5.5.5开始为默认的数据库引擎
InnoDB数据库文件
所有InnoDB表的数据和索引放置于同一个表空间中
表空间文件: datadir定义的目录下
数据文件: ibddata1, ibddata2, ...
每个表单独使用一个表空间存储表的数据和索引
启用:innodb_file_per_table=ON
两类文件放在数据库独立目录中
数据文件(存储数据和索引):tb_name.ibd
表格式定义:tb_name.frm
管理存储引擎
查看mysql支持的存储引擎:
show engines;
查看当前默认的存储引擎:
show variables like ‘%storage_engine%‘;
设置默认的存储引擎:
vim /etc/my.conf
[mysqld]
default_storage_engine= InnoDB;
查看库中所有表使用的存储引擎
show table status from db_name;
查看库中指定表的存储引擎
show table status like ‘tb_name‘;
show create table tb_name;
设置表的存储引擎:
CREATE TABLE tb_name(... ) ENGINE=InnoDB;
ALTER TABLE tb_name ENGINE=InnoDB;
以上是关于Mysql常用的存储引擎的主要内容,如果未能解决你的问题,请参考以下文章