Heap数据表只存在于内存中,它主要的用途是充当临时数据表。它采用了散列索引(hash index),这使得数据的存取速度非常快。heap表与临时表还是有区别的,它对于访问数据库的连接是永远可见的,即使连接丢失,表也不会消失。
虽然它的存取速度是最快的,但缺点也同样的明显。
1、因为使用的是内存,所以一旦断电或出现意外的时候,里面的数据将全部丢失
2、因为使用内存,所以text字段和blob字段是不允许使用的
3、对于heap表,只能使用 = 和 <=> 操作符来进行记录的搜索,而不能使用 < , > ,<= ,>= 这些操作符
4、heap表不允许有自增字段
5、heap表的大小有限制,通过mysql配置文件中的:max_heap_table_size来决定
临时数据表,一般是指采用create temporary table或者mysql为了存储中间结果而临时创建的数据表,表的类型可以是myisam,innodb,heap三种类型中的任何一种。这种数据表在MYSQL意外掉电的时候,一般不会消失(除了heap表),但MYSQL正常关机、MYSQL连接结束、MYSQL执行意外中断时,都将全部丢失。另外,这种数据表对于访问同一个数据库的MYSQL连接是不可见的,不同的用户即使创建相同名字的临时表而不会发生冲突,这点就与heap有区别。因为heap表是可见的,所以不能创建两个相同名字的heap表。
一般而言,人们提到的“临时表”更多的是指MYSQL为了保存select查询的中间结果而自动创建的临时表。因为在实际运用当中,很少会主动创建这些临时表。
临时表的存储也和MYSQL默认的存储位置不一样,在windows下面,一般来说是在c:\windows\temp目录下,而在unix/linux环境里通常在/tmp或/var/tmp/或/usr/tmp目录下。这个子目录是可以在mysql启动时进行配置。
除了上面这些常用的数据表类型,mysql还支持一些其他数据表,但这需要自行编译时加入或者直接使用MAX版本的数据库。要想知道你的数据库支持哪些类型的数据表,你可以通过执行:show engines来查看。
MYSQL所支持的数据表还有:BDB表,ARCHIVE表(压缩数据表,从4.1开始支持),CSV表(4.1开始支持),NDB表(mysql集簇,4.1开始支持),FEDERATED表(外部数据表,5.0开始支持)
下面简单的介绍一下,都是看来的,因为我都没有用过,黑黑
1、BDB表,这是最早具备事务功能的MYSQL数据表,但随着innodb驱动的日趋成熟,BDB已经几乎没有人使用了。
2、ARCHIVE表,和前面的提到的Mysql Compress表差不多,都是用于保存和备份数据而设计的。这种类型的表的优点是在保存数据之前会先对数据记录进行压缩。它只允许使用INSERTR命令,不允许执行UPDATE和DELETE命令。因为该表不允许数据被修改,同时,ARCHIVE表不支持索引,如果要进行SELECT操作,就必须遍历全部数据。因此,它只适合用于一些数据访问量很小的场合。
3、CSV表,这种类型大家应该很熟悉了,在使用excel的时候,就可以把数据存为CSV文件,一般采用逗号分割。基本上就是一文本文件,所以不支持索引功能。
4、NDB表。NDB集成在MYSQL MAX的版本中,是属于mysql集簇功能中的一种。NDB是英文network database的缩写,由名字也可以看出,它一般用来建设数据分布在大量计算机上的网络数据库,该表类型支持事务功能。如果需要使用该功能,必须在多台装有mysql max版本的联网计算机,并配置使他们都支持集簇功能时,才可以使用。
5、FEDERATED表。这种表的类型可以让用户去访问外部数据库里的数据表,而那个数据库系统可以位于本地网络中的另一台计算机上。在目前的MYSQL版本里,该功能所支持的外部数据库也必须是MYSQL,但未来,应该是可以支持更多版本。个人感觉,这就象一个proxy一样。在现有的版本里,通过FEDERATED进行的查询和事务都没有办法使用Query Cache工具优化,也不支持外部数据表的结构修改,但可以修改数据。即使用FEDERATED表时,不能使用alter table命令,但可以使用insert,update和delete命令。
最多的信息,也可以查看:http://dev.mysql.com/doc/mysql/en/storag-engines.html。
接下去就是介绍数据表文件和MYSQL所支持的一些数据类型了。