超详细MySQL常用数据库引擎

存储引擎简介

MySQL中的数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在MySQL中称为存储引擎。存储引擎就是MySQL将数据存储在文件西永中的存储方式或者存储格式。MySQL存储引擎就是MySQL数据库服务器中的组件,负责为数据库执行时机的数据I/O操作。使用特殊存储引擎的主要有点之一在于,仅需提供特殊应用所需的特性,数据库中的系统开销较小,具有更有效和更高的数据库性能。MySQL系统中,存储引擎处于文件系统之上,在数据保存到数据文件之前会传输到存储引擎,之后按照各个存储引擎的存储格式进行存储

常见存储引擎

  • MyISAM
  • InnoDB

MyISAM特点

1.不支持事务
2.表级锁定形式,数据在更新时锁定整个表
3.数据库在读写过程中相互阻塞
在数据写入的过程阻塞用户数据的读取
在数据读取的过程中阻塞用户的数据写入
4.过key_buffer_size来设置缓存索引,提高访问性能,减少磁盘IO的压力
5.MyISAM存储引擎数据单独写入或读取,速度过程较快且占用资源相对少
6.ISAM存储引擎不支持外键约束,只支持全文索引
7.MyISAM在磁盘上存储成三个文件,每一个文件的名字以表的名字开始,扩展名指出文件类型:
.frm文件存储表定义 #表头、属性等等
数据文件的扩展名.MYD(MYData)
索引文件的扩展名为.MYI(MYIndex)

MyISAM适用的生产场景举例

1.公司业务不需要事务的支持
2.一般单方面读取数据比较多的业务,或单方面写入数据比较多的业务,因为MyISAM具有读写互相阻塞的特点,数据读写比较频繁的场景不适合使用
3.MyISAM存储引擎数据读写都比较频繁场景不合适
4.使用读写并发访问相对较低的业务
5数据修改相对较少的业务
6.对数据业务一致性要求不是非常高的业务
7.服务器硬件资源相对比较差

InnoDB特点

1.事务,支持四个事务隔离级别
2.锁定,但是全表扫描仍然会是表级锁定
3.阻塞与事务隔离级别相关
4.非常高效的缓存特性,能缓存索引,也能缓存数据
5.主键以簇的方式存储
6.分区、表空间、类似Oracle数据库
7.外键约束,5.5.之前不支持全文索引,5.5版本以后支持全文索引
8.件资源要求还是比较高的场合

InnoDB适用生产场景分析

1.业务需要事务的支持
2.行级锁定对并发有很好的适应能力,但需确保查询是通过索引来完成
3.业务数据更新较为频繁的场景,如:论坛,微博等
4.业务数据一致性要求较高,例如:银行业务
5.硬件设备内存较大,利用Innodb较好的缓存能力来提高内存利用率,减少磁盘IO的压力

配置合适的存储引擎

1、查看数据库可配置的存储引擎类型

超详细MySQL常用数据库引擎

2、查看表正在使用的存储引擎

1).使用show table status命令查看表正在使用的存储引擎

mysql> show table status from school where name='student'\G;
school:指定当前的库
student:指定当前的表
超详细MySQL常用数据库引擎

2).使用show create命令查看表正在使用的存储引擎

mysql> use school; #进入数据库
mysql> show create table student;
超详细MySQL常用数据库引擎

3、修改存储引擎

1).方法1:使用alter table命令修改

mysql> use school
mysql> alter table student engine=MyISAM;
mysql> show create table student\G;
超详细MySQL常用数据库引擎

2).方法2:修改my.cnf主配置文件,指定默认存储引擎

[root@redhat7_5 ~]# vim /etc/my.cnf

[mysqld]标签中添加以下参数
[mysqld]
default-storage-engine=MyISAM

[root@redhat7_5 ~]# systemctl restart mysqld.service #重启服务

mysql> use school
mysql> create table teacher(id int not null primary key auto_increment,tname varchar(10));
mysql> show create table teacher\G;
超详细MySQL常用数据库引擎

3).方法3:create table创建表时指定存储引擎

mysql> use school
mysql> create table class(id int ,cname varchar(20)) engine=InnoDB; #创建库,指定引擎InnoDB
mysql> show create table class\G;

4).5.5版本使用mysql_convert_table_format转化存储引擎

[root@redhat7_4 ~]# yum -y install perl-DBI perl-DBD-MySQL #需要安装相关perl语言包
mysql> show create table test.info\G;
超详细MySQL常用数据库引擎

[root@redhat7_4 ~]# vim /usr/local/mysql/bin/mysql_convert_table_format
"e|engine|type=s" => \engine, #32行进行修改

[root@redhat7_4 ~]# mysql_convert_table_format --user=root --password=123 --host=localhost --socket=/tmp/mysql.sock --type=MyISAM test info

解析:
mysql_convert_table_format #批量转换存储引擎
--force                    #碰到错误强制进行转换
--host                     #指定转换的主机
--user                     #指定连接的用户
--password                 #指定连接的用户密码
--socket                   #指定socket文件存在的位置
--port                     #指定端口,如果不是"localhost"可以不指定

[root@redhat7_4 ~]# mysql -uroot -p -e "show create table test.info\G;"
超详细MySQL常用数据库引擎

5).5.7版本

[root@redhat7_5 ~]# yum -y install perl-DBI perl-DBD-MySQL #需要安装相关perl语言包

[root@redhat7_5 ~]# ls /usr/local/mysql/bin/mysql_c
超详细MySQL常用数据库引擎

猜你喜欢

转载自blog.51cto.com/11905606/2172771