从今天开始,逐步对MYSQL数据库的设计以及一些常规资料进行介绍。内容可能会参考网络或者书籍,当然还有自己的一些小小的经验。思维可能会有点跳跃,但可以肯定的是,本文没有一个字是从网上COPY下来,纯粹是手工输出。如果有错别字,请留言,我会尽快改正。
数据库应用程序的第一阶段往往都是对数据库进行设计,设计的好坏对应用程序执行效率的高低、程序的编写以及后期的维护工作的难易程序和能否在今后灵活修改设计方案等问题会产生巨大且深远的影响。因此,可以这么认为,在设计阶段埋下的隐患会在后期给开发者和使用者带来无穷的烦恼和痛苦,而这个,却没有任何捷径可走,数据库设计方案的好坏与设计者的知识和经验是否丰富有着很大的关系,如果单位有DBA的话,或许要担心的事会少一点,如果没有,黑黑,那就等着受苦吧。
事先说明,本人的设计能力也非常差,所以,在设计一块,我是绝对参照书本而写,即使有个人见解也不会太多。
要设计数据库,就不得不了解MYSQL数据表的一些基本类型,我在以前的文章里也介绍过,只是今天在这里我会介绍的更详细一点。MYSQL支持多种数据表类型,比较重要和使用的多的表类型是:myisam,innodb,heap三种。
如果在创建数据库的时候,没有指定表的类型,一定是根据mysql的配置文件中:default-table-type这个选项来决定的,基本上,大多数的设定都是myisam,也有可能是innodb,但几乎可以肯定不会是heap,如果有,那实在是太妖了。
今天有点晚了,先介绍一下myisam类型的表的特点吧,明天再介绍其他的。
myisam的最大特点就是成熟、稳定和易于管理,这种类型也是mysql所特有的。并且,如果没有其他什么特殊应用,如事务等,一般建议是选用这种类型的表结构。
虽然大家都了解myisam,并且在实际应用中也正在使用这种类型的表结构,但恐怕你不知道的是,即使是myisam结构,也会为三种类型:
1、myisam static(静态myisam),一般来说,如果数据表的数据列各自都有预先定义好的固定长度,服务器会自动选用这种类型。该类型的存储、读取效率非常高,即使是大量的CRUD操作(只是为了方便,因为R是读取,删了R的话,又是一个新名词,所以还是把R放在了里面)也是如此。同时,该类型的表结构安全性很高,即使出现文件受损或其他问题,数据记录的提取和恢复工作也比其他类型的数据表更容易。
2、myisam dynamic(动态myisam),这个就相对比较好解释了,凡是数据表结构里有varchar字段的,服务器就会自动选用这种类型。优点是:与静态myisam相比,本类型所占用的数据空间会小上很多,在存储字符串和二字制数据时所需要的字节数也往往就是它们的实际长度(或许会额外多出几个字节的开销)。缺点是,这样会造成每行数据的记录长度会不一致,如果数据在进行更新或删除操作的时候,很容易就会在原先存储这些数据的地方形成空洞,造成空间的浪费,而且还会造成数据的不连续,并分散在各处。当数据碎片越来越多的时候,数据的存取时间也就会越来越长。因此,就有了一个单独的方法:optimize table或者其他专门的工具来对数据表进行优化
3、myisam compressed(压缩型myisam),以上两种类型都可以使用myisamchk工具进行压缩,一般来说,压缩后的数据库占用空间大多仅为原来大小的一半(当然这也于数据库存储的内容有关)。虽然以后在读取他们的时候需要先进行解压缩操作,但在“低速硬盘+高速CPU”的系统上,数据表的访问会变得极快。然而,这种类型的表有一个非常致命的缺点,即它们是只读的,不能进行任何写操作。
今天先介绍到这里,明天继续往下讲。希望会给大家带来帮助。