|
|
文章中有如下一段话,不敢苟同:
知道这些信息以后,我们可以举个例子来说明如何估算每个索引能够包含多少条目,以及对于表来说,所产生的索引大约多大。对于每个索引块来说,缺省的PCTFREE为10%,也就是说最多只能使用其中的90%。同时9i以后,这90%中也不可能用尽,只能使用其中的87%左右。也就是说,8KB的数据块中能够实际用来存放索引数据的空间大约为6488(8192×90%×88%)个字节。
索引的pctfree值应该只是在创建索引或重建索引时生效,创建或重建完毕之后,在插入记录时是不受这个pctfree限制的,测试如下:
SQL> create table t(id int) tablespace users;
Table created.
SQL> create index idx_t on t(id) tablespace idx_2k;
Index created.
SQL> select table_name,index_name,pct_free from user_indexes where table_name='T';
TABLE_NAME INDEX_NAME PCT_FREE
------------------------------ ------------------------------ ----------
T IDX_T 10
SQL> begin
2 for i in 1 .. 100000 loop
3 insert into t values(i);
4 end loop;
5 commit;
6 end;
7 /
PL/SQL procedure successfully completed.
SQL> analyze index idx_t validate structure;
Index analyzed.
SQL> select name,blocks,lf_blks,br_blks,used_space,pct_used from index_stats;
NAME BLOCKS LF_BLKS BR_BLKS USED_SPACE PCT_USED
-------------------------------------------------- ---------- ---------- ---------- ---------- ----------
IDX_T 1024 864 7 1599166 100
SQL> alter index idx_t rebuild pctfree 10 tablespace idx_2k;
Index altered.
SQL> analyze index idx_t validate structure;
Index analyzed.
SQL> select name,blocks,lf_blks,br_blks,used_space,pct_used from index_stats;
NAME BLOCKS LF_BLKS BR_BLKS USED_SPACE PCT_USED
-------------------------------------------------- ---------- ---------- ---------- ---------- ----------
IDX_T 1024 965 8 1600361 89
[ 本帖最后由 lsq_008 于 2011-1-9 18:02 编辑 ] |
|