何谓存储引擎 :
MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中都使用着不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,能够各自在不同方面提高对数据增删改查操作的效率,从而改善你的应用整体功能。
这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。MySQL默认配置了许多不同的存储引擎,可以预先设置或者在MySQL服务器中启用。在项目中可根据需求选择适用于服务器、数据库和表格的存储引擎,以便在对数据进行增删改查时提供最大的灵活性。
修改数据库引擎 :
show variables like "default_tmp_storage_engine"; || show engines; 查看数据库使用的默认存储引擎
方式一 : 修改mysql配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf
在[mysqld]后面添加 default-storage-engine=InnoDB
重启mysql服务
方式二 : 建表时指定数据库引擎
create table mytbl( id int primary key, name varchar(50) )type=MyISAM;
方式三 : 建表后更改数据库引擎
alter table table_name type = InnoDB;
查看数据库引擎是否更改成功: show table status from table_name; || show create table table_name;
储存引擎分类 :
MyISAM
特点:不支持事务,也不支持行级锁和外键
引擎在创建表的时候,会创建三个文件,一个是.frm文件用于存储表的定义,一个是.MYD文件用于存储表的数据,另一个是.MYI文件,存储的是索引。
MyISAM索引用的 B+ tree索引结构 来储存数据,MyISAM索引的指针指向的是键值的地址,地址存储的是数据。索引和实际数据是分开存储的,不过是用索引指向了实际的数据(非聚集索引).
还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。
优势:拥有较高的插入、查询速度,访问速度快
劣势: 由于不支持事务操作,当表损坏后无法自动恢复
解决: mysql下的bin目录中有mysqlcheck.exe是专门修复myisam表损坏的,命令行执行,mysqlcheck -r database tablename -uroot -ppassword -h127.0.0.1 -P3306
使用场景:
对事务完整性没有要求,即不需要支持事务和支持外键的表设计,但是并不代表有事务操作的项目不能用MyIsam存储引擎,可以在service层进行根据自己的业务需求进行相应的控制。
需要 对表进行加锁的场景。
InnoDB
特点:具有提交、回滚和崩溃恢复能力的事务安全,支持行级锁和外键约束
与MyISAM一样也是使用 B+tree索引结构,但InnoDB的索引文件本身就是数据文件,即B+Tree的数据域存储的就是实际的数据(聚集索引)
缺点:写的处理效率差,占用更多的磁盘空间以保留数据和索引。
使用场景:
MEMORY(HEAP)
特点:使用内存中的内容来创建表,每个MEMORY表只实际对应一个磁盘文件,访问速度非常快,默认使用hash索引
缺点:服务一旦关闭,表中的数据就会丢失掉
使用场景:
存储数据特性:要求存储的数据是数据长度不变的格式,比如,Blob和Text类型的数据不可用(长度不固定的)。
注意: Memory同时支持散列索引和B树索引,B树索引可以使用部分查询和通配查询,也可以使用<,>和>=等操作符,散列索引相等的比较快,但是对于范围查询比较慢。
MyISAM与InnoDB之比较 :
原文:https://www.cnblogs.com/hsmwlyl/p/10587573.html