菜单

MySQL修改表存储引擎方法计算

2019年6月21日 - MySQL

表转变存款和储蓄引擎的不二法门总括

在mysql中最常用的表存储引擎有myisam与innodb了任何越来越尖端的大家大致不用也用不,对于myisam<=>innodb的特点小编想各位都驾驭一点了,上边笔者来介绍myisam<=>innodb互相调换吧。

 

MySQL作为最常用的数据库,常常遇上五颜六色的难题。明日要说的正是表存款和储蓄引擎的改变。有二种艺术,列表如下。

瞩目:存款和储蓄引擎修改将来,原始存款和储蓄引擎的专有天性都会丢掉。

1.真接修改。在多少多的时候相当的慢,而且在改换时会影响读取品质。my_table是操作的表,innoDB是新的贮存引擎。

举个例子,假使将多少个InnoDB调换到MyISAM存款和储蓄引擎,再转回来,那么最初在原InnoDB定义的外键都会丢掉。

 代码如下

  www.2cto.com  

复制代码

方法-1、ALTER TABLE

ALTER TABLE my_table ENGINE=InnoDB

[sql] 

2.导出,导入。这些相比便于操作,直接把导出来的sql文件给改了,然后再导回去。用mysqldump
,枫哥常用的是navicate那样更便于上手。友情提示危害极大。

mysql> ALTER TABLE mytable ENGINE = InnoDB;  

3.创设,插入。那些比第一种速度快, 安全性比第三种高,推荐。分2步操作

把表从一种存款和储蓄引擎换到另一种存款和储蓄引擎最简单易行的措施正是ALTE景逸SUV TABLE命令。

.创制表,先创设叁个和要操作表同样的表,然后改成存储引擎为指标引擎。   

 

 代码如下

特点:

复制代码

a、适合全数存款和储蓄引擎。

CREATE TABLE my_tmp_table LIKE my_table;
ALTER TABLE my_tmp_table ENGINE=InnoDB; 

b、调换进程会费用大批量年华。

b.插入。为了安全和进程,最棒增进工作,并限量id(主键)范围。

c、转变时候源表会被读加锁。 

 代码如下

 

复制代码

方法-2、转储(Dump)和导入(Import)

INSERT INTO my_tmp_table SELECT * FROM my_table;

 

修改表的贮存引擎myisam<=>innodb

利用mysqldump工具导出数据表,修改转储文件的CREATE TALBE 语句。

 

 

查看表的储存引擎

修改点:

 代码如下

a、删除转储文件里的DROP TALBE语句,幸免数据转储失利时,源数据也突然不见了。

复制代码

  www.2cto.com  

mysql> show create table tt7;
+——-+————————————————————————————————————————-+
| Table | Create
Table                                                                                                           
|
+——-+————————————————————————————————————————-+
| tt7   | CREATE TABLE `tt7` (
  `id` int(10) default NULL,
  `name` char(10) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+——-+————————————————————————————————————————-+
1 row in set (0.00 sec)

b、修改表名,数据库相对不一样意同一的表名出现,固然存款和储蓄引擎区别。

查看表的数据量
mysql> select count(1) from tt7;
+———-+
| count(1) |
+———-+
| 16777216 |
+———-+
1 row in set (0.00 sec)

 

 

c、修改存款和储蓄引擎。

方法一:

 

直白更换存款和储蓄引擎

方法-3、CREATE和SELECT

 代码如下

在艺术-1的进程和章程-2的安全性之间做了三个平衡。先创设一张表,然后用mysql的INSERT….SELECT语句来调换数据。

复制代码

 

mysql> alter table tt7 engine=innodb;
Query OK, 16777216 rows affected (2 min 39.80 sec)
Records: 16777216  Duplicates: 0  Warnings: 0

[sql] 

方法二:

mysql>CREATE TABLE innodb_table LIKE myisam_table;  

 

mysql>ALTER TABLE innodb_table ENGINE=InnoDB;  

把办法一中的贮存引擎改回myisam

mysql>INSERT INTO innodb_table SELECT * FROM myisam_table;  
 

 代码如下

http://www.bkjia.com/Mysql/488679.htmlwww.bkjia.comtruehttp://www.bkjia.com/Mysql/488679.htmlTechArticle表转换存储引擎的方法总结
注意:存款和储蓄引擎修改之后,原始存款和储蓄引擎的专有性情都会丢掉。
举个例子,假若将二个InnoDB转变来MyISAM存款和储蓄引擎,…

复制代码

mysql> alter table tt7 engine=myisam;
Query OK, 16777216 rows affected (27.09 sec)
Records: 16777216  Duplicates: 0  Warnings: 0

从这里也足以看看myisam表要比innodb表快大多

 

创建个和tt7一样表结构的表

 代码如下

复制代码

mysql> create table tt7_tmp like tt7;
Query OK, 0 rows affected (0.02 sec)

 

tt7_tmp作为中间结果集

 代码如下

复制代码

mysql> insert into tt7_tmp select * from tt7;
Query OK, 16777216 rows affected (27.20 sec)
Records: 16777216  Duplicates: 0  Warnings: 0

 

除去原表的数码

 代码如下

复制代码

mysql> truncate table tt7;
Query OK, 16777725 rows affected (0.18 sec)

 

那回退换原表的积攒引擎

 代码如下

复制代码

mysql> alter table tt7 engine=innodb;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

进程不慢就完事了

 

再把高级中学级结果集的数量导回原表中

 代码如下

复制代码

mysql> insert into tt7 select * from tt7_tmp;
Query OK, 16777216 rows affected (2 min 0.95 sec)
Records: 16777216  Duplicates: 0  Warnings: 0

 

删去中间表

 代码如下

复制代码

mysql> drop table tt7_tmp;

测试结果:

主意拾七分的快一些,不过数据量假使相当的大的话,方法二就要运用化整为零的分批操作的主意,不然insert操作将会具耗费时间,并发出大批量的undo日志。

如假如小表的话(500M以内,依据本人系统的硬件情形),选拔方法一就足以
假诺是大表的话,那就利用方法二+批量的点子

要是是批量改换表的蕴藏引擎

用于转移退换的SQL语句:

 代码如下

复制代码

SELECT CONCAT(‘ALTER TABLE ‘,table_name,’ ENGINE=InnoDB;’) FROM
information_schema.tables WHERE table_schema=’db_name’ AND
ENGINE=’myisam’;

用以转移检查表的SQL语句:

 代码如下

复制代码

SELECT CONCAT(‘CHECK TABLE ‘,table_name) FROM
information_schema.tables WHERE table_schema=’db_name’;

轶事自个儿系统安排修改如下参数,以加速改变速度(记得在此在此以前的值,一会还得改回来)

 代码如下

复制代码

SET GLOBAL sort_buffer_size=64*1024*1024;
SET GLOBAL tmp_table_size=64*1024*1024;
SET GLOBAL read_buffer_size=32*1024*1024;
SET GLOBAL read_rnd_buffer_size=32*1024*1024;

填补一下

MySql中有哪些存款和储蓄引擎?
     1
MyISAM:这种内燃机是mysql最早提供的。这种发动机又能够分成静态MyISAM、动态MyISAM
和压缩MyISAM三种:
   
静态MyISAM:假使数量表中的各数据列的长度都以优先固定好的,服务器将自行采纳这种表类型。因为数据表中每一条记下所占用的空间都是毫无二致的,所以这种表存取和立异的频率相当高。当数码受损时,恢复专门的学问也正如便于做。
   
动态MyISAM:假使数额表中现身varchar、xxxtext或xxxBLOB字段时,服务器将机关采用这种表类型。相对于静态MyISAM,这种表存款和储蓄空间相当的小,但鉴于每条记下的尺寸不一,所以屡屡退换数据后,数据表中的多寡就恐怕离散的蕴藏在内部存款和储蓄器中,进而导致施行成效下降。同期,内部存款和储蓄器中也大概会现出过多碎片。由此,那体系型的表要经常用optimize
table 命令或优化学工业具来拓展零散整理。
   
压缩MyISAM:以上说起的三种档期的顺序的表都能够用myisamchk工具压缩。那连串型的表进一步减小了占有的仓库储存,不过这种表压缩之后不能够再被退换。此外,因为是减少数量,所以这种表在读取的时候要先时行解压缩。
   
但是,不管是何种MyISAM表,这段时间它都不帮助专业,行级锁和外键约束的职能。
    2 MyISAM
Merge引擎:那体系型是MyISAM类型的一种变种。合併表是将多少个一样的MyISAM表合併为三个虚表。常选用于日志和数据仓库。
    3
InnoDB:InnoDB表类型能够用作是对MyISAM的更是立异产品,它提供了业务、行级锁机制和外键约束的成效。
    4
memory(heap):那体系型的数目表只存在于内部存款和储蓄器中。它选择散列索引,所以数据的存取速度十分的快。因为是存在于内部存款和储蓄器中,所以那系列型常应用于有的时候表中。
    5 archive:那系列型只援救select 和
insert语句,而且不协理索引。常使用于日志记录和聚焦解析方面。

http://www.bkjia.com/Mysql/633872.htmlwww.bkjia.comtruehttp://www.bkjia.com/Mysql/633872.htmlTechArticle在mysql中最常用的表存储引擎有myisam与innodb了其它更高级的我们几乎不用也用不,对于myisam
innodb的表征作者想各位都晓得一点了,上边我来介…

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图