打开主菜单


  每张表在硬盘或内存的物理存储,需要由存储引擎(Storage Engine, SE)完成。 存储引擎对数据库是插件(plugin),可以安装/卸载。SE影响了表的有效性能、稳定性、锁类型、查询cache的使用、需要的磁盘空间等等。

表类型(Table Type)已经是个过时概念,现在使用引擎(ENGINE)或存储引擎(STORAGE ENGINE)代替。

目录

存储引擎编辑

MyISAM 与 InnoDB编辑

MyISAM是表级上锁,InnoDB提供行级上锁。

除了外键,InnoDB支持事务。

MySQL在Linux上的默认表类型是MyISAM, 在Windows上默认表类型是InnoDB.


MyISAM编辑

  • 优点
    • 全文搜索
    • Geometric数据类型
    • 读速度更快
    • 数值是大尾序存储,利于索引压缩
    • 内部支持每张表一个AUTO_INCREMENT列。
  • 缺点
    • 表级锁
    • 无外键
    • 掉电后恢复更慢

InnoDB编辑

  • 优点
    • 事务安全(ACID兼容)存储引擎具有commit, rollback, 崩溃恢复能力
    • XA事务
    • 外键
    • 行级枷锁
    • 在主存维持自己的缓存池用于数据与索引的缓冲
    • 当主键物理排序或者hash索引时,查询速度更快
    • 表的大小不限,即使操作系统限制文件最大2GB.
    • 掉电后更快与可靠恢复
  • 缺点
    • 更多存储空间
    • ACID保证要求在事务提交时完全同步到硬盘。对于速度非常关键应用,也可以关闭这条。
    • 数据版本与事务,增加了表管理开销
    • 管理大量行锁要求很高内存
    • 对已有的表,增加索引很慢

Merge Table编辑

同义词为Merge, MRG_MYISAM

  • 一张MERGE table是相同的MyISAM表的集合。相同是指所有表有相同的列与索引信息。
CREATE TABLE mumbai (first_name VARCHAR(30), amount INT(10)) TYPE=MyISAM
CREATE TABLE delhi  (first_name VARCHAR(30), amount INT(10)) TYPE=MyISAM
CREATE TABLE total  (first_name VARCHAR(30), amount INT(10)) TYPE=MERGE UNION=(mumbai,delhi)

Merges可以用于克服MySQL或操作系统的文件尺寸限制。也曾用作代替view。MySQL 5.0开始支持view,因而Merge tables过时了

MEMORY / HEAP编辑

MySQL 4.1之前叫做HEAP。此后叫做MEMORY

3.23引入。

BDB编辑

Berkeley DB(BDB)在5.1版之后由于用户太少而被去除。

BLACKHOLE编辑

Discards all data stored in it but does still write to the binary log, so it is useful in replication scale-out or secure binlog-do filtering situations where slaves aren't trustworthy and for benchmarking the higher layers of the server.

其他编辑

  • CSV:
  • EXAMPLE (a stub for developers)
  • ISAM (3.23版本之前使用,从5.1删除)

存储引擎的元数据编辑

通过SQL可以得到你的server使用的存储引擎的元数据

MySQL 5.0开始可以用下述语句:

SHOW STORAGE ENGINES

STORAGE这个词可以省略。返回结果包含的列:

  • Engine - 名字.
  • Support - 是否支持,取值可以为:
    • 'DEFAULT' - 默认引擎
    • 'YES' - 支持;
    • 'DISABLED' - 已经编译,但MySQL启动时禁用该引擎,如启动参数选项:--skip-engine-name
    • 'NO' - 不支持
  • Comment - 描述
  • Transactions - 引擎是否支持SQL transactions
  • XA - 引擎是否支持XA transactions
  • Savepoints - 引擎是否支持savepoints与rollbacks

INFORMATION_SCHEMA `ENGINES` table编辑

`ENGINES`是INFORMATION_SCHEMA数据库中的虚拟的表. MySQL 5.1.5增加。

HELP 语句编辑

HELP 'myisam'

客户端可以输入:

help myisam \g

改变存储引擎编辑

SQL编辑

创建表时,使用 ENGINE 子句指定存储引擎:

CREATE TABLE ... ENGINE=InnoDB

否则,storage_engine变量的值被使用。你可以改变该变量:

SET storage_engine=InnoDB

或者修改MySQL服务器配置文件my.cnf中的default-storage-engine

修改已经存在的表的存储引擎:

ALTER TABLE `stats` ENGINE=MyISAM

mysql_convert_table_format编辑

MySQL提供了工具mysql_convert_table_format, 用Perl写成. 把表从一种存储引擎转换为另外的存储引擎。

语法:

mysql_convert_table_format [options] database

选项:

--help


--version


--host=host MySQL正在运行的host. 缺省: localhost.

--port=port TCP端口.

--user=user


--password=password


--type=storage_engine 转换后的存储引擎。

--force 错误发生时不停止执行

--verbose


例如:

mysql_convert_table_format --host=localhost --user=root --password=xyz970 --force --type=InnoDB test