mysql存储引擎
mysql体系结构
存储引擎: 就是存储数据,建立索引,更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型
查看已有表的使用存储引擎:
>show create table 表名\G;
查看当前数据库的默认存储引擎和可提供的存储引擎:
>show engines;
修改默认存储引擎:
step1:修改配置文件/etc/my.cnf
default_storage_engine=存储引擎
step2:重启mysqld服务
设置表的存储引擎:
1.alter table 表名 engine=存储引擎;
2.创建表时指定存储引擎:
create table 表名 (字段 类型)engine=存储引擎;
常用的存储引擎:
INNODB:一种兼顾高可靠性和高性能的通用存储引擎,mysql 默认存储引擎。支持外键,事务,行级锁
表文件:**.sdi(表结构文件) **.ibd(表空间文件,数据和索引)
show variables like "innodb_file_per_table"; #每一张表对应一个表空间文件
MYISAM:不支持外键,不支持事务,支持表级锁,不支持行级锁,访问速度快
表文件:**.sdi (表结构信息) **.MYD(表数据)**MYI(索引信息)
Memory:表数据存储在内存中,由于受到硬件文件 ,或者断电问题的影响,只能将这些表作为临时表或者缓存使用
特点:
内存存放,速度较快
hash索引(默认)
表文件:**.sdi(表结构文件 )
锁粒度:
表级锁:一次直接对整张表进行加锁
页级锁:对整个页面进行加锁
行级锁:只锁定某一行
锁类型:show status like "Table_lock%";
读锁:(共享锁)支持并发读
写锁:(排它锁,互斥锁)独占,上锁期间其他的线程不能进行读表和写表。
存储引擎选择
innodb:对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询外,还包含很多的更新和删除操作
myisam: 以读操作和插入操作为主,只有很少的更新个删除操作,并对事务的完整性和并发性要求不高
memory: 所有数据都在内存中,访问速度快,通常用于临时表及缓存,缺陷:对表的大小有限制,太大的表无法缓存到内存中,而且无法保证数据的安全性。
select操作多的表,使用于myisam存储引擎,节约系统资源
insert操作多的表,使用于innodb存储引擎,并发访问量大