暂无 |

1 表格与储存引擎

表格(table)是资料库中用来储存纪录的基本单位,在建立一个新的资料库以后,你必须为这个资料库建立一些储存资料的表格:

mysql_08_snap_01

每一个资料库都会使用一个资料夹,这些资料库资料夹用来储存所有资料库各自需要的档案:

mysql_08_snap_02

「Storage engine、储存引擎」是MySQL用来储存资料的技术,为了资料库多样化的应用,你可以在建立表格的时候,依照自己的需求指定一种储存引擎,不同的储存引擎会有不同的资料储存方式与运作的特色。MySQL提供许多储存引擎让你选择,下列是主要的三种储存引擎的简介:

  • MyISAM:MySQL预设的储存引擎,虽然它支援的功能并没有像一般的资料库那么多(例如交易、transaction);不过也因为它比较简单,所以运作的效率相对也比较好
  • InnoDB:这种储存引擎所提供的功能已经跟大型的商用资料库软体一样了,像是交易(transaction)、纪录锁定(row-level locking) 与自动回复(auto-recovery)。
  • MEMORY:这是一个比较特殊的储存引擎,它把资料储存在纪忆体中,所以运作的效率是最快的;不过只要MySQL伺服器关闭后,储存的资料就全部不见了。

1.1 MyISAM

「MyISAM」是MySQL预设的储存引擎,「预设」的意思是如果你在建立表格的时候没有指定一种储存引擎,MySQL会帮你建立的新表格指定为「MyISAM」储存引擎。以下列一个使用MyISAM储存引擎的资料库来说,在资料库资料夹中的档案会像这样:

mysql_08_snap_03

当你建立一个表格以后,「MyISAM」储存引擎会建立以表格名称为档案名称的三个档案,以「city」表格来说:

mysql_08_snap_04

使用「MyISAM」储存引擎的资料库具有「可携性、portable」的特色,你可以很容易的把一个资料库复制到另外一台电脑的MySQL伺服器中:

mysql_08_snap_05

注:使用「MyISAM」储存引擎时,MySQL并不会限制一个资料库中可以包含的表格数量。不过一个表格会在档案系统中建立三个档案,如果超过作业系统对于档案数量或容量的限制,你就不能再建立任何新的表格。

1.2 InnoDB

MySQL资料库伺服器从3.23.49版本开始把「InnoDB」储存引擎列为正式支援的功能,所以从这个版本开始,MySQL也提供与大型商用资料库软体一样的功能。最主要的功能是支援「交易、transaction」,在比较复杂的资料库应用系统中,很常遇到这样的情况:

mysql_08_snap_06

在顺利的情况下,当然不会有任何问题。可是如果发生下列的情况:

mysql_08_snap_07

这样的情况是一定要避免,否则资料库中储存的资料就会出现很大的问题了。所以一般的大型商用资料库都会使用交易的功能来处理这样的情况:

mysql_08_snap_08

「InnoDB」储存引擎除了提供许多功能外,与「MyISAM」储存引擎最大的差异是档案的储存方式:

mysql_08_snap_09

「InnoDB」储存引擎实际储存在档案系统中的档案会像这样:

mysql_08_snap_10

注:因为使用「InnoDB」储存引擎的表格会使用同一个储存空间,所以不同资料库的表格资料也会储存在一起。「InnoDB」储存引擎限制在这个共用的储存空间中不能超过两百万个表格。

1.3 MEMORY

「MEMORY」储存引擎与其它储存引擎有一个主要的差异,就是它会把纪录与索引资料储存在记忆体中。所以使用「MEMORY」储存引擎的表格,不论在查询或维护资料时的效率都是很好的。在档案系统中储存的档案只有「frm」档,也就是储存表格结构资讯的档案:

mysql_08_snap_11

注:因为「MEMORY」储存引擎会把纪录与索引资料储存在记忆体中,所以只要MySQL伺服器关闭、重新启动、当机,所有使用「MEMORY」储存引擎的表格资料都会全部消失,只剩下表格结构;它也不适合储存大量资料的表格,会耗用太多记忆体

1.4 储存引擎与作业系统

虽然MySQL资料库是一个独立运作的软体,不过它还是得安装在某一个作业系统中,例如Windows或Linux。而由作业系统控制的档案系统可能会有许多限制,例如档案的数量和档案的大小。如果MySQL资料库软体在建立或使用资料库档案的时候,超过作业系统的限制,就会发生错误。

如果以支援的功能来决定储存引擎的话,那就会比较明确。如果要以作业系统的限制来决定储存引擎的话,你可以参考下列的作法:

  • 使用「MyISAM」储存引擎可以避免违反档案大小的限制
  • 使用「InnoDB」储存引擎可以避免违反档案数量的限制
  • 如果在档案数量与大小的限制都遇到问题的话,你只好增加硬体和修改作业系统在档案系统上的设定

0

java教程
php教程
php+mysql教程
ThinkPHP教程
MySQL
C语言
css
javascript
Django教程

发表评论

    评价:
    验证码: 点击我更换图片
    最新评论