上一篇讲到会员系统数据库设计时,在设计上性能考虑的五点中的第一点----合理定义字段的数据类型。
接下来讲解设计上性能考虑的五点中的第二点:将会员表分拆成多个表。
具体做法是将会员表中字段依据业务按读取频率分为三类:频繁读取的、普通频率读取的、很少读取的,然后将这三类字段分别建到三个不同的表中-----会员主信息表、会员基础信息表、会员辅助信息表。例如将经常要读取的会员ID、会员登录名、会员密码、会员类型、会员昵称等字段放到会员主信息表中,将兴趣爱好,QQ号码之类放到会员辅助信息表中。
这点很重要,但为何要这样做,提升性能的原理是如何的,则与oracle数据库的存储结构、读取原理直接相关,接下来重点介绍。
数据块(Oracle Data Blocks),本文简称为“块”,是Oracle存储及读写中非常重要的概念。块是oracle最小的存储单位,Oracle数据存放在“块”中。一个块占用一定的磁盘空间。在设计数据库,特别是建表的时候,必须将oracle块大小作为最基本的依据。块大小在安装数据库的时候会设定,目前通常缺省为8K。块的大小设置与系统是OLTP或OLAP有关,通常OLTP设置为8K比较适合,OLAP则可以设置更大一些。
Oracle每次请求数据的时候,都是以块为单位。也就是说,Oracle每次请求的数据是块的整数倍。如果Oracle请求的数据量不到一块,Oracle也会读取整个块。所以说,“块”是Oracle读写数据的最小单位或者最基本的单位。
块的标准大小由初始化参数DB_BLOCK_SIZE指定。具有标准大小的块称为标准块(Standard Block)。块的大小和标准块的大小不同的块叫非标准块(NonstandardBlock)。同一数据库中,Oracle9i及以上版本支持同一数据库中同时使用标准块和非标准块。Oracle允许指定5种非标准块(Nonstandard Block)。
操作系统每次执行I/O的时候,是以操作系统的块为单位;Oracle每次执行I/O的时候,都是以Oracle的块为单位。
补:操作系统同样有块概念,oracle的块大小是操作系统块的整数倍。
有了块以及oracle请求数据是以块为单位的概念,我们就很容易理解在表设计的时候,需要依据业务将访问频率作为依据将表分拆,读取频率高,特别是有时候还需要列表形式展示的字段,集中到一个表中,读取频率低的另外存放。举例:oracle数据块大小为8K,会员表有20个字段,每条记录存储空间1K,也就是说一个块存放8条记录;假如将20个字段依据业务分成2到3个表,其中频繁读取的字段单独建立一张表,存储空间为0.1K,那么一个块可以存放80条记录。假定oracle一次IO请求一个块,则意味着不分表的时候,一次只能读8条记录,而分表后一次能读80条记录。这种性能上的提高就不单单是提高百分之几的问题了。而是好几倍。
查看oracle标准块大小:
select * from v$parameter wherename = 'db_block_size'