目前在web各大小企业使用的大部分是mysql5.7version,5.7相较于前版本比较有更好的性能提升,虽然2023年10月31日停止维护,但相较于后者(8+)有更大的使用基数,且我个人认为知识无所不通,升级迭代其思想不会颠覆,故针对5.7version进行记录。
-- 查看数据库版本
show version();
可以使用 select version(); 查看数据库当前使用版本。
在mysql中,有很多引擎,包括InnoDB、MRG_MYISAM、MEMORY、BLACKHOLE、MyISAM、CSV、ARCHIVE、PERFORMANCE_SCHEMA、FEDERATED等。之前听有人说起和面试者的回答,有部分人说有两种InnoDB和MyISAM,这固然是不对的,可能受部分没调研的文章影响,希望能甄别。
-- 查看支持的引擎
show engines;
可以使用 show engines; 查看版本系统支持的引擎。
就常用的三种引擎进行记录,InnoDB、MyISAM、MEMORY。
1.InnoDB存储引擎
InnDB是事务型数据库的引擎之一,也是首选引擎(提到事务,有人认为只有InnoDB支持事务,其实引擎支持事务不是特例,上文提到的BLACKHOLE黑洞引擎也支持事务),支持acid,支持事务的完整性,一致性。
支持行级锁,行级锁可以在最大程度上支持并发。
可以处理巨大数据量,与mysql服务器完全整合,在主内存中缓存数据和索引维持自己的缓冲池。
有外键完整性的约束,在存储数据时,每张表都会按照主键顺序存放,如果建表时没有定义,InnoDB会给每一行生成一个6字节的rowId,并作为主键。
可以进行数据修复,当服务崩溃时可以依靠其本身的redo log来保证恢复。
2.MyISAM存储引擎
MyISAM不支持事务,当有事务要求时不能使用。
MyISAM不支持行级锁,支持表级锁,锁的成本会变小,但是并发性能也严重缩水;写入时阻塞读取,读取时阻塞写入,都是读操作时,不会阻塞。
该引擎通过key_buffer缓存索引,但是不会缓存数据。
3.MEMORY存储引擎
这个引擎是比较特殊的引擎,在内存中创建表,所有的数据放在内存中,但是表结构作为文件存储在磁盘里,该文件的文件名与表名相同,类型为.frm类型。
支持哈希(HASH)索引和 B+树索引,可以在创建索引时指定类型,默认使用哈希,速度较快。
该引擎数据不安全,因其存在内存中,固突发异常情况会导致数据丢失,只剩下表结构。
引擎是作为插件在MySQL存在,理论上是否使用都可以,但MySQL的架构决定了必须使用一种引擎。在实际工作中,绝大多数都会选择InnoDB作为数据存储引擎,因为其有完整的事务和并发控制。当处理低写入高读取且无事务的场景可以用MyISAM,无事务不需要保证数据安全且数据量不大时可以考虑使用MEMORY。引擎之间没有三九流之分,其存之必有其意,合理地使用引擎,可助长之。