mysql MYISAM和Innodb

myisam的特点:


1,每张MyISAM 表被存放在三个文件 。frm 文件存放表格定义。 数据文件是MYD (MYData) 。 索引文件是 MYI (MYIndex) ;

2,不支持事务,不支持外键;

3,对整张表进行加锁,而不是行。在读数据的时候,所有的表上都可以获得共享锁(读锁),每个连接都不互相干扰。在写数据的时候,获得排他锁,会把整个表进行加锁,而其他的连接请求(读,写请求)都处于等待中;

4,可以基于BLOB或TEXT类型列的前500个字符,创建相关索引;

5,延迟更新索引,MYISAM 默认把DELAY_KEY_WRITE开启, 这个选项是MYISAM引擎独有的。在修改结束后,不会将索引的改变数据写入磁盘,而是改变内存中的索引数据。只有在清理缓冲区或关闭表时才将索引块转储到磁盘;

6,提供索引压缩功能,采用前缀压缩,可以对字符串类型进行压缩,也可以对整形进行压缩。在列中每行的值比较类似的情况下会较大的压缩索引的大小,从而也可以把更多的索引信息放入内存,这也是查询效率比较高的原因之一;

7,在执行select count(*) from table的时候时间复杂度为1,在执行oder by的时候默认按升序排序会很快;

8,mysql索引是非聚簇索引(即只存储索引),而innodb是聚簇索引(是把索引和数据存储在一起);

9,innodb寻址要映射到块,再到行,MYISAM 记录的直接是文件的OFFSET,定位比INNODB要快(总结索引的时候在详细的说)。


暂且想到了上面9个特点,以后再慢慢补充细化吧。


innodb的特点:

1,遵循ACID,支持commit,rollback和故障恢复,是事务安全的;

2,支持外键;

3,修改的时候执行行级锁定。,Oracle-style读一致性改善了多用户并发操作性能 。

InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与ORACLE不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁。

除此之外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如 update table set num=1 where name like “%abc%”

4,InnoDB存储它的表&索引在一个表空间中,表空间可以包含数个文件(或原始磁盘分区)。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上。包括日志文件;


注意:

在mysql5.1中一定要使用innodb plugin,这是innodb的新版本。她相比innodb有太多的好处,例如:利用排序创建索引,删除或者是增加索引时不需要复制全表数据,支持压缩的存储格式,新的blob存储方式以及文件格式管理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值