Chinaunix首页 | 论坛 | 博客
  • 博客访问: 970210
  • 博文数量: 335
  • 博客积分: 10287
  • 博客等级: 上将
  • 技术积分: 3300
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-08 15:29
文章分类

全部博文(335)

文章存档

2015年(4)

2014年(15)

2013年(17)

2012年(11)

2011年(12)

2010年(96)

2009年(27)

2008年(34)

2007年(43)

2006年(39)

2005年(37)

我的朋友

分类: Mysql/postgreSQL

2013-03-08 12:16:08

MyISAM是MySQL默认存储引擎。每个表最大支持_4.295E+09条记录以及可以支持64个索引字段,二者也可能因不同版本而更大。

MyISAM也支持对Text/Blo字段的全文索引。MyISAM类型的数据库的表和索引是分离的,文件扩展名分别以.MYD和.MYI,这些文件可以直接复制到其他MySQL数据库中使用。MyISAM支持表锁定

InnoDB为处理海量数据时最大性能而设计。最大表空间可以是整个文件或磁盘。支持事务处理,外键和行级锁。(在行级锁上应该注意,InnoDB只对where为主键有效,非主键的都会锁全表)

如果需要对表的插入、更新或删除大于查询,选择InnoDB
如果需要设计成关系型数据库,选择InnoDB
如果需要做全文搜索,选择MyISAM
如果有磁盘空间的限制,选择MyISAM
如果在不清楚其他的情况下,选择MyISAM

支持的级别有三种:表锁定、块锁定和行锁定

***************************************************************
以下是一些细节和具体实现的差别:

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 table set num=1 where name like “%aaa%”

任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势。
阅读(1605) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~