这个问题是个经典问题,也是一个充满辩证的问题
一个表到底有多少个列?有人说oracle最大允许1000个列,有人说,最好255个列?但是,根据是什么?
我觉得,一个表到底多少个列合适,应该考虑如下几个方面:
(1)按照模型设计原则,寻找这个实体型客观上到底有多少个列,这是从逻辑结构的角度来说的
(2)在完成(1)的设计之后,再做优化考虑,如果这个表的列有点多(多的标准是性能的不满意,或者行长度大于一个BLOCK),那么,考虑一下常用列和不常用列,将他们分拆到两个表中,用相同主键关联;
(3)一个表的一行记录,应该在一个BLOCK中,这点很重要,不然数据读写的IO太多,性能严重不行,所以,这是原则要求,一个行要能放到一个BLOCK中
(4)一些表,字段很少,比如新浪主页,我们要存在一张表中,假设是标题,内容两列,但是标题很短,30个汉字,内容却很多,2000个汉字,但全表2个列,是不是就放在一起呢?不是的!!
要记住,一个表的记录的读取,是以一个BLOCK块为单位进行读取的,而且一个行是完整获取的!
意思是说,如果我把标题和内容放在一个表中,即使我只查看标题信息,那在读取标题列时,也会把同一行的内容一起读取出来到内存了,这样内容的IO开销是多余的,而且是太多,还占用大量的内存
此时,要考虑,将标题放一个表, 将内容放另一个表,他们用相同的主键惯量!
这样,当你浏览主页的时候,首先看到的标题,就从标题表中读取,占用空间少,减少了很多IO
而后,当你喜欢某个主题之后,在想阅读内容时,你就可以再从内容表中选择出感兴趣的内容,IO就高效了!性能就好了!