首页 > 数据库 > 数据库开发技术 > 关于一表很多列的总结
在ITPIB上遇见一个表有900多列的例子,自己在以前也看到曾经有人这样做过,以下就这个问题做一个总结吧。
http://www.itpub.net/showthread.php?s=&threadid=829101&perpage=10&pagenumber=3
问题
一个有920列的表算列比较多的表吗? oracle10g中我们的一个表有920列,其它几个表有700多列,主要是插入,没有更新。 插和读比较多,表的存储是按照日期来分区的。但是所有的这些表都在一个表空间上。 只是不知道920多列是否算多,对应数据库的性能影响大吗? |
关于这样做的好处:我不清楚在的数据库在设计阶段为什么要设计这么大的表,应该有自己的考虑,但是抛开他们的这些考虑,这样做的好处无外乎有以下好处:
1、一个行能够容纳所有的资料。
2、设计简单
3、程序员编程方便
4、以后维护方便
5、减少表表之间的链接
但是实际的系统运行中,由于你这样的设计会给系统带来很多问题,其中就包括性能问题:
1、由于你将一个表设计的过为复杂,在查询的时候需要建立多各索引才能满足你的需要,索引过多引起的性能问题
2、表的列过多,你选择一行数据的时候往往并不是所有列的数据都需要,但是这些数据都存在一个块中,既是你不需要,但是系统还是会将那些数据提取出来,这样就会造成过多的IO,逻辑读和物理读
3、可能造成过多的行连接或者行迁移,也会影响系统性能
另外,oracle是可以提供超过1000列的数据,但是在Oracle的数据块的存放中数据的存放是有一个字节来标识这哥列是第几个列,也就是说一个字节只能表示255个列,但是如果一个表有多余255列是如何实现的哪?Oracle是通过链接列的形式存在的,这些也给oracle的处理带来一定的负担,所以从Oracle的实现上来说,将呢的列控制在256之内是一个选择。
4、在好处有程序员编程方便的好处,但是这些多的列,程序员写出来应该是比较辛苦的,呵呵
有几种方式来实现这种需求的设计:
1、主从表的方式
你可以根据业务的需要出发,将这个表分成一个主表,多个从表的形式,主从之间使用唯一外键进行删除接连。这样的好处就是可以避免一些弊端。
2、使用纵相设计的方式实现
例如表有列c1,c2......c1000可以实现为:
col,col_values两个列的形式来实现。
这样有好处就是可以动态添加自己所需要的列,实现起来很灵活,方便
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/222350/viewspace-932493/ ,如需转载,请注明出处,否则将追究法律责任。