浅谈MySQL、Oracle及Postgres中的tablespaces0+

10,652 views / 2010.03.22 / 2:02 下午

如果你不知道tablespaces(表空间),你一定会问这到底是NND什么玩意儿,居然会出现在这么多数据库中。其实很简单,tablespaces是为了维持数据库高效运行而附加的一些逻辑条件。

在oracle和mysql中,tablespaces用来存储一些诸如表和索引的数据段,而在postgres中,一个tablespac是一个物理单元,是一个连接到特定目录的符号连接,它不能运行在不支持符号连接的操作系统,如windows.

实际上,数据文件是oracle和mysql的物理存储机制,虽然postgres也把表数据存在独立文件中,但它支持的表空间非常小。因此,更加合理的把数据分发到磁盘上能够使oracle和mysql的性能更上一层楼, tablespaces正是为了这种合理分发数据方法便于操作而诞生的。

Oracle和mysql创建tablespace的语法基本相同,oracle支持更多的参数,且在一个tablespace允许由多个数据文件组成。下面是一个在mysql下创建和使用tablespace的简单示例:

mysql> create tablespace myts
-> add datafile 'myfirstfile'
-> engine = falcon;
Query OK, 0 rows affected (0.48 sec)
mysql> create table testmyts (
-> abc integer )
-> tablespace myts;
Query OK, 0 rows affected (0.11 sec)

简单说明下,第一条命令是创建一个名字为myts的tablespace, 赋给它的文件名字为myfirstfile,当然我们要使用falcon引擎(介绍),运行完这个命令后,就会在mysql数据存储目录中发现一个名为myfirstfile的文件。

第二条命令是用这个tablespace创建一个表,这时候你再看那个tablespace文件,是不是变大了呢?如果没有,向这个表中多插入几条数据再看看。

在oracle中创建表结构,和mysql类似,也很简单:

SQL> create tablespace myts
 datafile 'myfirstfile'
 size 10M;
Tablespace created.
SQL> create table testmyts (
 abc integer )
 tablespace myts;
Table created.
SQL> 

在oracle中,我们无需声明引擎类型,但要声明存储大小。我们可以创建一个小体积的存储空间,然后使用autoextend让其自动扩展,但是这个存储大小是必须要初始化的。

Categories: 感悟 Tags: , , ,