MySQL表类型的选择

P131)创建表时的默认引擎是InnoDB,如果要修改默认的存储引擎,可以在参数文件中设置default-table-type。查看当前的默认存储引擎,可以使用一下命令:

创建新表的时候可以通过增加ENGINE关键字设置新建表的存储引擎。也可以通过ALTER TABLE语句,将一个已经存在的表修改成其他的存储引擎。



一. MyISAM(P134)

MyISAM不支持事务,不支持外键,其优势是访问速度块,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本上都可以使用这个引擎来创建表。

每个MyISAM在磁盘上存储为3个文件,其文件名都和表名相同,但拓展名分别为:

  • .frm(存储表定义);
  • .MYD(MYData,存储数据);
  • .MYI(MYIndex,存储索引)。

数据文件和索引文件可以放在不同的目录,平均分布IO,获得更快的速度。

MyISAM表还支持3种不同的存储格式,分别是:

  • 静态(固定长度)表;
  • 动态表;
  • 压缩表。

静态表是默认的存储格式,其中的字段都是非变长字段,这样每个记录的长度都是固定的,优点是存储速度非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多。静态表的数据在存储时会按照列的宽度定义补足空格,然后在获取的时候将最后的空格全部去掉。

动态表中包含变长字段,记录不是固定长度的,这样存储的优点是占用的空间少,但频繁的更新和删除记录会产生碎片,需要定期执行OPTIMIZE TABLE语句或者myisamchk-r命令来改善性能,并且在出现故障时恢复相对困难。

压缩表由myisampack工具创建,占据非常小的磁盘空间。因为每个记录是被单独压缩的,所有只有非常小的访问开支。



二. InnoDB(P136)

InnoDB表的自动增长列可以手工插入,但是插入的值如果是空或者0,则实际插入的将是自动增长后的值。

可以通过ALTER TABLE table_name ATUO_INCREMENT=n;语句强制设置自动增长列的初始值,默认从1开始,但是该强制的默认值是保留在内存中的,如果该值在使用之前数据库重启,那么这个强制的默认值就会丢失,就需要在数据库启动以后重新设置。

可以使用select LAST_INSERT_ID();查询当前线程最后插入记录使用的值。如果一次插入了多条记录,那么返回的是第一条记录使用的自动增长值。

对于InnoDB表,自动增长列必须是索引列。如果是组合索引,也必须是组合索引的第一列,但是对于MyISAM表,自动增长列可以是组合索引的其他列,这样插入记录后,自动增长列是按照组合索引的前面几列进行排序后递增的。

时间: 2024-12-19 04:07:35

MySQL表类型的选择的相关文章

mysql(表类型的选择)

1.查询mysql所支持的存储引擎 第一种方法:show engines \G 第二种方法  show variables like "have%"; 2.设置和修改存储引擎 创建表的时候就可以设置 方法一:create table c(id int primary key) engine=myisam default charset=utf8 方法二: alter table c engine=innodb;

MySQL表类型和存储引擎版本不一致解决方法

使用的是老版本的mysql客户端Navicate 8 ,mysql 服务端用的是mysql5.6的版本,在修改版本引擎的时候出现版本不对; mysql error ‘TYPE=MyISAM’ 解决办法: Replace TYPE=MyISAM with ENGINE=MyISAM The problem was “TYPE=MyISAM” which should be “ENGINE=MyISAM” as per MySQL version updates – a simple search

MySQL表类型MyISAM/InnoDB的区别(解决事务不回滚的问题)(转)

MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具. MyISAM表格可以被压缩,而且它们支持全文搜索.它们不是事务安全的,而且也不支持外键.如果事物回滚将造成不完全回滚,不具有原子性.如果执行大量的SELECT,MyISAM是更好的选择. InnoDB:这种类型是事务安全的.它与BDB类

MySQL表类型

MyISAM表类型: ISAM(Indexed Sequential Access Method,索引顺序存取方法),是IBM公司发展起来的一个文件操作系统,可以连续地或者任意地记录任何访问.每次索引定义了一次不同排列的记录.它是一种索引机制,用于高效访问文件中的数据行. MyISAM表是ISAM类型的一种延伸,具有很多优化和增强的特性,它是MySQL的默认表类型.MyISAM优化了压缩比例和速度,并且可以很方便的在不同的操作系统和平台之间进行移植. HEAP表类型: heap:堆,堆积,大堆阵

六、mysql字段类型选择

1.char类型字段会自动删除字符串后面所带的空格,而varchar不会 2.char比varchar快..... 3.myisam 建议 char类型,memory char跟varchar一样,都作为char类型处理:innodb建议 varchar类型 4.optimize table 清理碎片 text碎片产生实例: create table emp (id tinying(1),content text)engine=myisam; 新建测试表 insert into emp valu

表类型(存储引擎)的选择

表类型(存储引擎)的选择 插件式存储引擎是MySQL数据库最重要的特性之一,用户可以依据应用的需要选择如何存储和索引数据.是否使用事务等. MySQL5.0支持的存储引擎包括MyISAM.InnoDB.BDB.MEMORY.MERGE.EXAMPLE.NDB Cluster.ARCHIVE.CSV.BLACKHOLE.FEDERATED等,其中InnoDB和BDB提供事务安全表,其他存储引擎提供非事务安全表. 默认情况下,创建新表不指定表的存储引擎,则新表是默认存储引擎,如果需要修改,设置def

MySQL学习笔记之三 表类型

你能用的数据库引擎取决于MySQL在安装时候是如何被编译的.要添加一个新的引擎,就必须编译MySQL.仅仅为了添加一个特性而编译应用程序的想法对于Windows的开发人员来说可能有点小题大做,得不偿失,但是在Unix的世界里,这已经成为了标准.在缺省的情况下,MySQL支持三个引擎:ISAM.MyISAM和HEAP.另外两种类型InnoDB和Berkley(BDB),也常常可以使用. ISAM ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之初就考虑到数据库被查询的次数远远大于

浅谈MySql的存储引擎(表类型) (转)

什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库,sql server数据库等等其实是数据库管理系统,它们可以存储数据,并提供查询和更新数据库中的数据的功能等等.根据数据库如何存储数据和如何操作数据的实现机制不同,这些数据库之间即有区别又有共同点. MySql数据库是开放源代码的关系型数据库.目前,它可以提供的功能有:支持sql语言.子查询.存储过程.触发器.视图.索引.事务.锁.外

浅谈MySql的存储引擎(表类型)

来源:http://www.cnblogs.com/lina1006/archive/2011/04/29/2032894.html 什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合.    我们通常说的MySql数据库,sql server数据库等等其实是数据库管理系统,它们可以存储数据,并提供查询和更新数据库中的数据的功能等等.根据数据库如何存储数据和如何操作数据的实现机制不同,这些数据库之间即有区别又有共同点