memory,myisam 和 innodb
memory 存储引擎将表的数据存放在内存中,速度很快。
mysql关闭后所有数据消失,mysql启动时会创建空表。
基于上面两个重要特征,我们一般用它来存储一些在短时间内需要告诉访问但是无需在磁盘持久化的数据,
例如在单点登录(SSO)的一种解决方案中有一个非常适合的应用场景:
用户从网站A跳转到网站B,这时候网站A需要为此次跳转生成一个令牌并发送给网站B,此时我们可以把令牌存储到内存表中,
网站B接受到令牌之后,会通过一个服务器端请求网站A来验证令牌的正确性。
memory存储引擎也是一个绝佳的cache解决方案。
当内存表中的数据大于max_heap_table_size设定的大小时,mysql会转换超出的数据存储到磁盘上。
我们可以通过实际情况调节max_heap_table_size,也可以通过加入MAX_ROWS=一个数值 来控制表的记录数
create table 'tablename' (
id int unsigned not null auto_increment primary key
)engine=memory charset=utf8 max_rows=100000
myisam 和 innodb 是使用mysql时最常用的两个表类型。
1.innodb不支持fulltext类型的索引。
2.innodb不保存表的具体行数。也就是说在执行 select count(*) from table 时,Innodb要扫描一遍整个表来计算有多少行,
但是myisam只要简单读出保存好的行数即可。注意的是,当count(*)语句包含 where 条件时,两种表的操作是一样的。
3.对于auto_increment类型的字段,innodb中必须包含只有该字段的索引,但是在myisam表中,可以和其他字段一起建立索引。
4.delete from table 时,innodb不会重新建立表,而是一行一行的删除。
5.load table from master 操作对innodb是不起作用的,解决办法是首先把innodb表改成myisam表,导入数据后再改成innodb表,
但是对于使用额外的innodb特性的表不适用。
innodb的行锁也不是绝对的,假如在执行一个sql语句时mysql不能确定要扫描的范围,innodb表同样会锁全表,
例如 update tablename set num =1 where name like '%aaa%'
两种类型最主要的区别就是 innodb支持事物处理与外键和行级锁。而myisam不支持,因此,myisam往往就容易别人为只适合在小项目中适用。
1.如果执行大量的select ,myisam表类型更合适。如果执行大量的insert 和 update,innodb更合适。
2.myisam的索引和数据时分开的,并且索引是压缩的。(表定义文件的扩展名为.FRM,数据文件的扩展名为.MYD,索引文件的扩展名为.MYI)
3.myisam 数据恢复方便。
4.select count(*) 的这类操作,适合用myisam类型的表。

浙公网安备 33010602011771号