为什么当要在表上执行大量insert语句时,建立的索引,要设置较大的pctfree?最好解释的详细点
解决方案 »
- 关于SQL语句中关键字
- 紧急问题,昨天我查询的数据库有100条记录,今天一查只有80条记录了。
- DBMS_SQL.execute 返回值问题
- oracle 不同用户之间 调用存储过程 高手指教
- 现在要将B表中一字段的内容弄到A表中的对应的字段中,请问怎么写SQL?
- 改变本机IP及计算机名后,如何启动managermentserver 和tnslistener服务
- 一个简单的sql,请指教
- 如果我刚刚delete了一张表,想把数据找回来,有没有办法呢?
- 在sco下访问linux oracle数据库问题!(在线等)
- 搜集TOAD的各软件的功能
- oracle 建表时,出现oracle建表时,出现SP2-0042:未知命令“>”-其余行忽略,求解?
- oracle触发器 修改后触发删除操作:当修改一个表中的某一个字段为1后,删除该表中该字段为 -1的记录
最好先理解pctfree的意义。PCTFREE:为一个块保留的空间百分比,表示数据块在什么情况下可以被insert,默认是10,表示当数据块的可用空间低于10%后,就不可以被insert了,只能被用于update;即:当使用一个block时,在达到pctfree之前,该block是一直可以被插入的,这个时候处在上升期。假设你一个块可以存放100个数据,而且PCTFREE 是10,PCTUSED是40,则:不断的向块中插入数据,如果当存放到90个时,就不能存放新的数据,这是受pctfree来控制,预留的空间是给UPDATE用的。所以,实际上PCTFREE就是用来控制你的块的保留空间,PCTFREE越大,块保留的空间越多。为什么要保留空间呢?就是为了防止UPDATE,因为数据类型的长度可以调整,比如从varchar2(20)调整到varchar2(50),那么多出来的空间如果不设置pctfree的话,就会导致块分裂和行迁移,影响表查询性能。所以在表上执行大量insert语句时,建立的索引,并不一定要设置较大的pctfree。但是如果你确定你可能需要增加索引列的字段类型长度的时候,最好设置合适的pctfree,一般情况下都是采用默认即可。