Table 的 Row 大小对性能和 Tablespace的影响

[复制链接]
查看11 | 回复7 | 2015-4-24 16:04:24 | 显示全部楼层 |阅读模式
大家好,我有个问题,想请教一下。
公司有个oracle 10g (64位) 的数据库,db_block_size = 8k.
有同事建了几个表,每个表大约70个字段,其中19个为 varchar2(2000). 估计使用时,每行肯定远远大于8k, 而且这些表里的数据经常更改。
请问这样是否肯定都系统性能造成很大影响,而且不断要去扩表空间,虽然原有表空间任有不少空间,但没有这么多连续的8k的 block_size. 请问是不是这样的?
多谢!
回复

使用道具 举报

千问 | 2015-4-24 16:04:24 | 显示全部楼层
虽然定义了2000长度,如果插入的时候没有值,那么,不会占用太多的空间,varchar2类型存储主要看真正的长度
但是,对于更新而言,如果更新后值变得很长,则很容易导致行迁移,从而降低性能
回复

使用道具 举报

千问 | 2015-4-24 16:04:24 | 显示全部楼层
原帖由 tzhongmin 于 2010-10-17 15:42 发表
大家好,我有个问题,想请教一下。
公司有个oracle 10g (64位) 的数据库,db_block_size = 8k.
有同事建了几个表,每个表大约70个字段,其中19个为 varchar2(2000). 估计使用时,每行肯定远远大于8k, 而且这些表里的数据经常更改。
请问这样是否肯定都系统性能造成很大影响,而且不断要去扩表空间,虽然原有表空间任有不少空间,但没有这么多连续的8k的 block_size. 请问是不是这样的?
多谢!



70个字段!19个为 varchar2(2000)!把你们同事叫来打PP~ 问他为什么要这么建立表? 必须这样么?
回复

使用道具 举报

千问 | 2015-4-24 16:04:24 | 显示全部楼层
多谢诸位。
问题是,系统数据量本不多,但经常要扩表空间,应该更这表有关吧?
回复

使用道具 举报

千问 | 2015-4-24 16:04:24 | 显示全部楼层
1.没事儿用varchar2(2000)你真的有这么多字符串要存储么? 这样你的pga和client的内存肯定不够用
2.没事放70个子段在一个表里面,你知道每向后一个字段,oracle查询这个字段就要多耗费一部分成本~ 因为oracle没发定位列的位置,必须从头读起
回复

使用道具 举报

千问 | 2015-4-24 16:04:24 | 显示全部楼层
把你的同事拉出来打pp,绝对不是冤枉他,哪有这么设计数据库的
回复

使用道具 举报

千问 | 2015-4-24 16:04:24 | 显示全部楼层
19个为 varchar2(2000),存的啥东西,需要这么多字段,
回复

使用道具 举报

千问 | 2015-4-24 16:04:24 | 显示全部楼层
这样会造成很多的行链接~~~
实在该打PP
可以对表进行重设计,然后对原有的数据进行行迁移
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行