首页 > 代码库 > MyISAM 与InnoDB引擎

MyISAM 与InnoDB引擎

 Mysql提供了插件式(pluggable)的存储引擎,存储引擎基于表的。

Show engines;查看存储引擎

备注:my.ini配置文件的【mysqld】选项组中,参数default-storage-engine配置了mysql服务实例的默认存储引擎。默认安装mysql后,default-storage-engine的参数值为InnoDB

InnoDB存储引擎

InnoDB是事务(transaction)安全的,并且支持外键(foreign key)。如果某张表主要提供OLTP支持,需要执行大量的增删改操作(insert update delete)。对于支持事务的InnoDB表,影响速度的主要原因是打开了自动提交(autocommit)选项,或者程序没有显示调用“begin transaction;”和“commit”提交事务,导致每条insertdatabase或者update语句都自动开始事务和提交事务,严重影响了更新(insertupdatedelete)。

 

MyISAM存储引擎主要提供OLAP支持,MyISAM具有自检和修复表的大多数工具。MyISAM表可以被压缩。如果某张表需要大量select语句,出于性能考虑,采用MyISAM

 

使用set default_storage_engine=MyISAM;可以修改存储引擎;

如果想永久地设置默认存储引擎,需要修改my.ini配置文件中【mysqld】选项组中default-storage-engine的参数值,并且需要重启mysql服务。

 

Create table my_table

选择InnoDB引擎,创建表后,生成一个表名、后缀名为frm的表结构定义文件my_table.frm.

Frm文件记录了my_table表结构定义。

 

选择MyISAM引擎,创建表后,生成一个表名、后缀名为frm的表结构定义文件外,还会自动创建一个表文件名为表名、后缀名为MYD(即MYData的简写)的数据文件以及文件名为表名、后缀名为MYIMYIndex)的索引文件。

 

 

表记录

备注:NULL与空字符串“ ‘ ’ ”是两个概念。例如,查询name值为NULL的记录,需要使“name  is  null”;而查询name值为空字符串“ ‘ ’ ”的记录,需要使用“name= ‘ ‘”。类似地,NULL与完整数零以及空格字符“ ‘ ’ ”的概念也不相同。

 

InnoDB表空间

InnoDB表空间分为共享表空间与独享表空间。

共享表空间:

Mysql服务实例承载的所有数据库的所有InnoDB表的数据信息、索引信息、各种元数据信息以及事务的回滚(UNDO)信息,全部存放在共享文件中。默认情况下,该文件位于数据库的根目录下,文件名是ibdata1,且文件的初始大小为10M。可以使用mysql命令“show variables like ‘innodb_data_file_path’;,查看文件的属性(文件名、文件的初始大小、自动增长等属性信息)。

独享空间

如果将全局系统变量InnoDB_file_per_table的位置设置为ONInnoDB_file_per_table)的默认值为OFF),那么以后再创建InnoDB存储引擎的新表时,这些标的数据信息、索引擎将保存到独享表空间文件中。

 独享空间的使用

首先,首先使用mysql命令“show  variables like ‘innodb_file_per_table’;”查看该全局系统变量的值,然后,使用mysql命令“set @@global.innodb_file_per_table=ON;”将全局系统变量(@@global)中的参数InnoDB_file_per_table设置为开启。接着,使用mysql命令“show variable like ‘innodb_file_per_table’;”查看该全局系统变量的值。

 

备注:重做日志信息采用轮循策略依次记录在ib_logfile0ib_logfile1重做日志文件中。无论是MyISAM存储引擎的表,还是InnoDB存储引擎的表,都必须唯一对应一个frm表结构文件。

   如果数据库中还包含有InnoDB表,在备份数据库时,不仅需要将整个数据库目录复制一份,还需要复制共享表空间文件ibdata1,以及重做日志文件ib_logfile0ib_logfie1.

 

删除表

Drop table table_name,即可删除名为table_name的表。