MYSQL存储引擎特性及选择

创建新表时如果不指定存储引擎,系统就会使用默认引擎,MYSQL5.5之前默认引擎是MyISAM,5.5之后改为了InnoDB。
查看默认存储引擎的方法:show variables like 'table_type'; 
查看数据库支持的存储引擎:1.show engines \g  2.show varaables like 'have%';

更改存储引擎的方法:alert table tablename engine = innodb;

 各种存储引擎特性

MyISAM
MyISAM 不支持事务、也不支持外键,其优势是访问速度快,对事务完整性没有要求或者以SELELCT、INSERT为主的应用可以使用该引擎来创建表。
MyISAM在磁盘上存储成3个文件,其文件名和表明相同,扩展名分别是.frm(存储表定义)、
.MYD(MYData,存储数据)、MYI(MYIndex,存储索引)。数据文件和索引文件可以放到不同的绝对路径下,创建表的时候通过DATA DIRECTORY 和INDEX DIRECTORY 语句指定。
MyISAM类型的表提供修复工具,可以用CHECK TABLE 语句检查表的健康,并用REPAIR TABLE修复。
MyISAM支持3中存储格式:静态表(固定长度)、动态表、压缩表。
静态表是默认存储格式,优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用空间比动态表多,存储时按列宽补足空格,返回给应用时会去掉空格,所以如果保存的时候内容后面有空格,返回结果的时候会被去掉。
动态表记录不是固定的长度,优点是占用空间相对较少,但是频繁的更新和删除记录会产生碎片,需要定期的执行 OPTIMIZE TABLE语句或myisamchk-r命令来改善性能,并且故障时相对较难恢复

InnoDB 
InnoDB 存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MYISAM,InnoDB的处理效率差些,并且会占用更多的磁盘空间以保留数据和索引。
1.自动增长列
  自动增长列可以手工插入,但是插入值如果是0或者空,则实际插入的将是自动增长后的值可以通过alert table tablename auto_increment=n;强制设置自动增长的初始值。
  InnoDB表自动增长列必须是索引,如果是组合索引,必须是组合索引的第一列。对于myisam可以是组合索引的其他列。
2.外键约束
mysql支持外键的存储引擎只有InnoDB,在创建外键时,要求父表必须有对应的索引,子表在创建外键时也会自动创建对应的索引。创建索引时可以指定在删除更新父表时对子表进行相应的操作,RESTRICT(无操作)、CASCADE(子表跟随父表操作)、SET NULL(置空)、NO ACTION(无操作)。
3.存储方式
 共享表空间存储
 多表空间存储
 进行单表备份和恢复
 alert TABLE tablename DISCARD  TABLESPACE;
 alert table tablename IMPORT  TAblESPACE;
 只能恢复到表原来所在的数据库中, mysqldump和mysqlimport可以恢复到目标数据库。

MEMORY
MEMORY存储引擎使用存在于内存中的内容来创建表,每个MENORY表实际上对应一个磁盘文件,格式为.frm。MENORY类型的表访问非常的快,因为他的数据放在内存中默认使用hash索引,但是一旦服务关闭,表中数据就会丢失。在给MEMORY表创建索引的时候可以指定HASHsuoyin还是BTREE索引,create index mem_hash using hash on table mem_tab (id);
启动mysql服务的时候使用-init-file选项,把insert into ... select 或者load data infile语句放入这个文件,就可以在服务启动的时候从持久稳固的数据源装载表。
MEMORY类型的存储引擎主要用于那些内容变化不频繁的代码表,或者作为统计操作的中间表结果。对MEMOTY表进行更新操作,数据不会存入磁盘,所以要考虑重启服务后如何获得这些修改后的数据。

MERGE
MERGE存储引擎是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,MERGE表本身没有数据,MERGE表通过INSERT_METHOD=LAST/FIRST 定义插入哪个MyISAM表,不定义这个子句或者定义为NO表示不能对MERGE表进行操作。MERGE表不能智能的将记录下颚到对应的表,而分区表可以。假定有两个MyISAM表 p1,p2 创建MERGE表的语句为:
create table p_all (id int,p_date datetime,INDEX(id))engine =merge union=(p1,p2) INSERT_METHOD=LAST;



如何选择合适的引擎
MyISAM:如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性,并发要求不高
InnoDB:用于事务处理应用程序,支持外键。对事务完整性有较高要求,在并发条件下要求数据一致性,除了插入和查询,还包括很多更新删除操作。
MEMORY:通常用于更新不太频繁的小表,用以快速得到访问结果。
MERGE:用于将一系列 的MyISAM表以逻辑的方式组合在一起,可以突破MyISAM表的大小,将表分布到不同的磁盘上,改善访问效率。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章