关于聚集表的学习
关于簇表和表簇:
1)簇表的后台有一张物理表叫表簇,定义簇表的时候要指定对应的表簇.一个表簇对应多张簇表.
表簇的结构:
Field |
Data type |
Meaning |
CLKEY1 |
* |
First key field |
CLKEY2 |
* |
Second key field |
... |
... |
... |
CLKEYn |
* |
nth key field |
Pageno |
INT2(5) |
Number of the continuation record |
Timestamp |
CHAR(14) |
Time stamps |
Pagelg |
INT2(5) |
Length of the string in Vardata |
Vardata |
RAW (n) |
Contains the entries from the data fields of the assigned cluster tables as a string, max. length n depends on the database system used |
2)簇表是多张透明表组合而成,这些多张簇表中共有的主键在表簇中也会对应主键,注意是多张簇表中共有的。
非共有的主键和非主键的所有值都存在表簇中的VARDATA字段中,是个字符串类型。表簇中连续记录簇表中的数据,如果记录值超过了
字段VARDATA的长度,会被连续写到相同的键值下,字段Pageno用于区别相同的键值下记录的连续。字段Pagelg是记录字段Vardata中目前的
数据字符串的长度,Timestamp时间戳。Pagelg和Timestamp相当于记录管理信息,因此查询簇表的时候也不可以用join 关联其他表
3)查询簇表的时候ST05解析出来的是查询的表簇,所以下where条件的时候最好不要下非关键字的,最好去看看对应的表簇的关键字,要是
要下非关键字的话就去查看簇表时由哪些透明表组成的,把条件下到那些透明表中。
关于池表也叫共享表(下面都叫池表吧) 和表池:
1)池表也叫共享表后台对应一张表叫表池,定义池表的时候也要制定对应的表池,一个表池也是对应多张池表共享表:
表池的结构:
Field |
Data type |
Meaning |
Tabname |
CHAR(10) |
Name of pooled table |
Varkey |
CHAR (n) |
Contains the entries from all key fields of the pooled table record as a string, max. length for n is 110 |
Dataln |
INT2(5) |
Length of the string in Vardata |
Vardata |
RAW (n) |
Contains the entries from all data fields of the pooled table record as a string, max. length n depends on the database system used |
2)池表也是由多张透明表组成,表池中有四个字段其中Tabname记录所有它对应的池表名称,Varkey记录所有池表中的主键,(和表簇不同
吧) 字段Vardata记录对应的池表中所有字段的数据记录形成一个大的字符串,它的最大长度取决于数据库系统,意思就是表池中的一条记
录就是一个表的所有记录。字段Dataln也是用来记录字段Vardata中存储字符串的长度。
3) 因为查询池表的时候数据库中也是没有一个对应的表的,是查询的表池中的数据,表池中没有对应的字段,这边尝试了where条件是主键
的话,表池会根据查询的字段条件是 池表的名称TABNAME 和 存主键的字段VARKEY,并且把VARKEY定义个条件范围用between关键字。如果下
的条件没有主键的话,就仅仅解析出where条件只是池表的名称,但是也能查询出来数据,但是数据量大的情况下会是很慢的,显然跟池表一
样都可以查询出来,但是我们不要用,因为速度太慢。显然该表查询也是不能用join关联其他表的。
总结:
簇表和池表(共享表)都叫聚集表,这两种表都是大大压缩了数据库的空间,一般都会存储系统数据,比如屏幕数据,文档之类的。用的时
候要慎重。 2014/5/28 下午