数据库
首页 > 数据库> > MySQL表的类型说明及表状态的更改

MySQL表的类型说明及表状态的更改

作者:互联网

MySQL表类型说明

MyISAM:是MySQL的默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method(有索引的顺序访问方法)的缩写,它是存储记录和文件的标准方法,与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具。MyISAM表格可以被压缩,而且它们支持全文搜索。它们不是事务安全的,而且也不支持外键。如果事务回滚将造成不完全回滚,不具有原子性。如果执行大量的SELECT,MyISAM是更好的选择。

InnoDB: 这种类型是事务安全的,它与BDB类型具有相同的特性,它们还支持外键,InnoDB 表格速度很快,具有比BDB还丰富的特性,因此如果需要一个事务安全的存储引擎,建议使用它。如果你的数据执行大量的INSERT或者UPDATE,处于性能方面的考虑,应该使用InnoDB表。

对于支持事务的InnoDB类型的表,影响速度的主要原因是AUTOCOMMI,默认设置是打开的,而且程序没有显示调用BEGIN开始事务,导致每插入一条都自动Commit,严重影响了速度。可以在执行SQL前调用begin,多条SQL形成一个事务(即使autocommit打开也可以),将大大提高性能。

1.查看表状态

show table status like ‘数据表’

Engine:引擎类型(旧版为type);
Row_format:行的格式,可选Dynamic,Fixed或Compressed;
Dynamic:行长度可变,一般包含可变长度字段,varchar或Bolb
Fixed:长度固定
Compressed:只在压缩表中存在
collation:默认字符集和字符列排序规则
checkSum:如果启用,保存的整个表的实时校验;
Comment:注释或表空间剩余信息,视图则为VIEW文本字样。

2.修改表引擎

目前有三种方式进行切换;
1)alter table语句:
alter table 数据表 engine=InnoDB;

优点:高效,按行复制记录到新表中
缺点:可能消耗系统所有I/O。原表加锁。

2)手工导入与导出
使用MYSQL自带工具mysqldump导出到文件,修改文件中的Create table引擎语句,同事修改表名,且默认在create table前加上drop table语句。

3)创建与查询

create table 数据表copy like 原数据表;

alter table 数据表copy engine=InnoDB;

insert into 数据表copy select * from 原数据表;

数据量不大,工作很好,数据量大,分批处理,每一段数据一个事务,避免大失误产生的undo操作。

MySQL类型不支持事务处理等高级处理,而InnoDB类型支持,MyISAM类型的表强调的是性能,其执行数比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外键等高级数据库功能,两种类型最主要的差别就是InnoDB支持事务处理与外键和行级锁,所以MyISAM往往就容易被认为只适合在小项目使用。
但是从我目前运维的数据库平台要达到需求:99.9%的稳定性,方便的扩展性和高可用性来说的话,MyISAM绝对是我的首选。

原因如下:

1、MyISAM的读性能是比Innodb要好。

2、MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率提高了。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积大很多。

3、应用开发人员不小心update一个表where写的范围不对,导致这个表没法正常用了,这个时 候MyISAM的优越性就体现出来了,随便从当天拷贝的压缩包取出对应表的文件,随便放到一个数据库目录下,然后dump成sql再导回到主库,并把对应 的binlog补上。如果是Innodb,恐怕不可能有这么快速度。

4、从接触的应用逻辑来说,select count(*) 和order by 是最频繁的,大概能占了整个sql总语句的60%以上的操作,而这种操作Innodb其实也是会锁表的,很多人以为Innodb是行级锁,那个只是 where对它主键是有效,非主键的都会锁全表的。

5、有时需要给部门一些数据,MyISAM的话很方便,只要发给他们对应那表的frm.MYD,MYI的文 件,让他们自己在对应版本的数据库启动就行,而Innodb就需要导出xxx.sql了,因为光给别人文件,受字典数据文件的影响,对方是无法使用的。

6、如果和MyISAM比insert写操作的话,Innodb还达不到MyISAM的写性能,如果是针对基于索引的update操作,虽然MyISAM可能会逊色Innodb,但是高并发的写,通过多实例分库分表架构来解决。

7、如果是用MyISAM的话,merge引擎可以大大加快部门的开发速度,他们只要对这个merge表做一些select count(*)操作,非常适合大项目rows某一类型(如日志,调查统计)的业务表。

索引

标签:更改,Innodb,数据表,索引,InnoDB,MyISAM,MySQL,及表,table
来源: https://blog.csdn.net/weixin_42307675/article/details/89914843