日期:2014-05-16  浏览次数:20825 次

有关Mysql存储引擎(表类型)和索引的分析

MySQL中的数据用各种不同的技术存储在文件(或者内存)中,这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。

在我安装的 6.0.11-alpha-community MySQL Community Server (GPL)中,有以下几种引擎:

mysql> show engines;

+------------+---------+----------------------------+--------------+------+------------+

| Engine ? ? | Support | Comment ? ? ? ? | Transactions | XA ? | Savepoints |

+------------+---------+----------------------------+--------------+------+------------+

| MEMORY ? ? | YES ? ? | Hash based, stored in memory, useful for temporary tables ? ? ?| NO ? ? ? ? ? | NO ? | NO ? ? ? ? |

| BLACKHOLE ?| YES ? ? | /dev/null storage engine (anything you write to it disappears) | NO ? ? ? ? ? | NO ? | NO ? ? ? ? |

| MRG_MYISAM | YES ? ? | Collection of identical MyISAM tables ? ? ? ? | NO ? ? ? ? ? | NO ? | NO ? ? ? ? |

| MARIA ? ? ?| YES ? ? | Crash-safe tables with MyISAM heritage ? ? ? ? | YES ? ? ? ? ?| NO ? | NO ? ? ? ? |

| CSV ? ? ? ?| YES ? ? | CSV storage engine ? ? ? ? | NO ? ? ? ? ? | NO ? | NO ? ? ? ? |

| FEDERATED ?| NO ? ? ?| Federated MySQL storage engine ? ? ? ? | NULL ? ? ? ? | NULL | NULL ? ? ? |

| ARCHIVE ? ?| YES ? ? | Archive storage engine ? ? ? ? | NO ? ? ? ? ? | NO ? | NO ? ? ? ? |

| InnoDB ? ? | DEFAULT | Supports transactions, row-level locking, and foreign keys ? ? | YES ? ? ? ? ?| YES ?| YES ? ? ? ?|

| MyISAM ? ? | YES ? ? | Default engine as of MySQL 3.23 with great performance ? ? ? ? | NO ? ? ? ? ? | NO ? | NO ? ? ? ? |

+------------+---------+----------------------------+--------------+------+------------+

9 rows in set (0.07 sec)

?

MYSQL的默认存储引擎为:InnoDB,除非我们显示的指定存储引擎,如:

mysql> CREATE TABLE mytable (id int, title char(20)) ENGINE = MEMORY;?

?

?

MyISAM

? ? 每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。

这种引擎提供了最佳的性能和功能的组合,尽管它缺少事务处理功能(使用InnoDB或者BDB引擎)并且使用表级锁定。测试中发现一个问题,MyISAM引擎的表的INSERT速度远远大于InnoDB引擎。所以,我们如果在使用非事物处理的表(也就是一些只有单用户使用的表)