MySQL存储引擎和数据类型

来源:互联网 发布:大学网络推广策划书 编辑:程序博客网 时间:2024/04/25 15:34
 
MySQL支持许多不同的存储引擎,有时候也称作表格类型。这就意味着对这些表的内部实现可以有选择。数据库每个表可以使用不同的存储引擎,而且可以轻松地对它们进行转换。
我在我本机上运行“mysql>show engines”命令(如果运行的是MySQL4.1.2之前的版本,请执行mysql>show variables like ‘have_%’命令查看)查看MySQL服务器可以使用哪些存储引擎,显示结果如下:
Engine
Support
Comment
MyISAM
DEFAULT
Default engine as of MySQL 3.23 with great perform...
MEMORY
YES
Hash based, stored in memory, useful for temporary...
InnoDB
YES
Supports transactions, row-level locking, and fore...
BerkeleyDB
NO
Supports transactions and page-level locking
BLACKHOLE
NO
/dev/null storage engine (anything you write to it...
EXAMPLE
NO
Example storage engine
ARCHIVE
YES
Archive storage engine
CSV
NO
CSV storage engine
ndbcluster
NO
Clustered, fault-tolerant, memory-based tables
FEDERATED
NO
Federated MySQL storage engine
MRG_MYISAM
YES
Collection of identical MyISAM tables
ISAM
NO
Obsolete storage engine
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手册