📒个人主页:热爱生活の李📒
❤️感谢大家阅读本文,同时欢迎访问本人主页查看更多文章❤️
🙏本人也在学习阶段,如若发现问题,请告知,非常感谢🙏
查看存储引擎
show engines
设置默认的存储引擎
查看默认存储引擎
show variables like ‘%storage_engine%’
或
select @@default_storage_engine
修改默认存储引擎
启动服务器的命令行
set default_storage_engine = MyISAM;
或修改my.cnf文件
default-storage-engine=MyISAM
设置表的存储引擎
创建表时指定存储引擎
create table 表名 (
建表语句
)engine = 存储引擎
修改表的存储引擎
alter table 表名 engine = 存储引擎名
InnoDB引擎与MyISAM引擎
InnoDB:具备外键支持功能的事务存储引擎
InnoDB是MySQL的默认事务型引擎,它被设计用来处理大量短期(short-lived)事务。可以确保事务的完整提交和回滚。
对比MyISAM的存储引擎,InnoDB写的处理效率差一些,并且回占用更多的磁盘空间以保存数据和索引。
MyISAM只缓存索引,不缓存真实数据;InnoDB不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响。
MyISAM:非事务处理引擎
MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务、行级锁、外键,有一个毫无疑问的缺点就是崩溃后无法安全恢复
优势是访问的速度快,对事务完整性没有要求或者以select为主的应用
MyISAM与InnoDB对比
首先对于InnoDB存储引擎,提供了良好的事务管理、崩溃修复能力和并发控制。因为InnoDB存储引擎支持事务,所以对于要求事务完整性的场合需要选择InnoDB,比如数据操作除了插入和查询以外还包含有很多更新、删除操作,像财务系统等对数据准确性要求较高的系统。缺点是其读写效率稍差,占用的数据空间相对比较大。
其次对于MyISAM存储引擎,如果是小型应用,系统以读操作和插入操作为主,只有很少的更新、删除操作,并且对事务的要求没有那么高,则可以选择这个存储引擎。MyISAM存储引擎的优势在于占用空间小,处理速度快﹔缺点是不支持事务的完整性和并发性。
对比项 | MyISAM | InnoDB |
---|---|---|
外键 | 不支持 | 支持 |
事务 | 不支持 | 支持 |
行级锁 | 不支持 | 支持 |
缓存 | 只缓存索引 | 缓存索引和真实数据,对内存要求高,内存大小也影响性能 |
关注点 | 性能:节省资源、消耗少、简单业务 | 事务:并发写、事务、更大资源 |
拓展 Memory引擎:置于内存中的表
Memory采用的逻辑介质是内存,响应速度很快,但是当mysqld守护进程崩溃的时候数据会丢失。另外,要求存储的数据是数据长度不变的格式。
Memory同时支持哈希索引和B+树索引
哈希索引相等的比较快但是对于范围查询比较慢
默认使用哈希索引
如果希望使用b树索引,可以在创建索引时选择使用
Memory表至少比MyISAM表快一个数量级
Memory表的大小是受到限制的
表的大小主要取决于两个参数,分别是max_rows和max_heap_table_size
数据文件与索引文件分开存储
缺点:其数据易丢失,生命周期短。
使用Memory存储引擎的场景
1、目标数据比较小,而且频繁访问
2、如果数据是临时的并且必须立即可用得到
3、存在在Memory表中数据丢失也没有关系
有了Memory为啥还要redis
redis支持持久化,更加安全且还支持多种数据结构的存储