MySQL支持许多不同的存储引擎,有时候也称作表格类型。这就意味着对这些表的内部实现可以有选择。数据库每个表可以使用不同的存储引擎,而且可以轻松地对它们进行转换。
我在我本机上运行“mysql>show engines”命令(如果运行的是MySQL4.1.2之前的版本,请执行mysql>show variables like ‘have_%’命令查看)查看MySQL服务器可以使用哪些存储引擎,显示结果如下:
InnoDB表是如下情况的理想引擎:
l 更新密集的表
l 事务
l 自动灾难恢复
MyISAM表是如下情况的理想引擎:
l 选择密集的表
l 插入密集的表
选择密集的表
插入密集的表
MyISAM静态:如果所有表列的大小都是表态的(即不使用xBLOB、xTEXT或VARCHAR数据类型),MySQL就会自动使用静态MyISAM格式
优点:性能高,
缺点:表占用空间相对比较大
MyISAM动态:如果所有表列(即使有一列)定义为动态的(使用xBLOB、xTEXT或VARCHAR数据类型),MySQL就会自动使用动态MyISAM格式
优点:占用空间相对比较小
缺点:性能低有时会产生碎片(如某个字段的内容发生变化时)
补救方法:尽可能使用静态类型及使用[LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...命令进行优化
OPTIMIZE命令使用情况:如果您已经删除了表的一大部分,或者如果您已经对含有可变长度行的表(含有VARCHAR, BLOB或TEXT列的表)进行了很多更改,则应使用OPTIMIZE TABLE。被删除的记录被保持在链接清单中,后续的INSERT操作会重新使用旧的记录位置。您可以使用OPTIMIZE TABLE来重新利用未使用的空间,并整理数据文件的碎片。
在多数的设置中,您根本不需要运行OPTIMIZE TABLE。即使您对可变长度的行进行了大量的更新,您也不需要经常运行,每周一次或每月一次即可,只对特定的表运行。
OPTIMIZE TABLE只对MyISAM, BDB和InnoDB表起作用。
对于MyISAM表,OPTIMIZE TABLE按如下方式操作:
1. 如果表已经删除或分解了行,则修复表。
2. 如果未对索引页进行分类,则进行分类。
3. 如果表的统计数据没有更新(并且通过对索引进行分类不能实现修复),则进行更新。
对于BDB表,OPTIMIZE TABLE目前被映射到ANALYZE TABLE上。对于InnoDB表,OPTIMIZE TABLE被映射到ALTER TABLE上,这会重建表。重建操作能更新索引统计数据并释放成簇索引中的未使用的空间。
其他引擎及更详细信息请查看mysql手册
(责任编辑:IT) |