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存储方式以及文件格式管理。