日期:2014-05-16  浏览次数:20470 次

<<让oracle跑得更快2>>读书笔记(1)
1 如果一个多分区的表,要将某个分区的数据导出去,可以通过表空间导出的方式导出,方法步骤为:
   1)建立一个临时表及临时索引
   2) 通过交换分区的方法互换:

       alter table sale_data exchange partition sales_2009_1 with
table tmp_sale_data_2009_1 including indexes with validation;

   3)导出整个表空间
   4) 将离线的数据库导入新的表空间
   5) 将导入的临时表中的数据和索引重新交换到分区表中去

2 delete不能释放其表空间,因为表的高水位线并不能下降,必须用drop或者truncate
操作。

3  哈希分区
   create table t_hash partition by hash(object_id) partitions 8 as select * from dba_objects;
  select partition_name,count(*) from user_extents where segment_name='T_HASH' group by partition_name
   分区的数量应该是2的N次方为好
   哈希区,不能drop,split及merge分区,但可以truncate方式清除分区数据,比如
   alter table t_has truncate partition sys_p48;
   注意的是,如果hash列上的数据大量重复,则会造成数据分布不均匀

4 列表分区
  ....partition by list(sales_date)
     (partition abc values('xxx','....'),
      partition  def values('xxxx','yyyy'),
      partition hijk values(default));//默认分区

5 对重复率很低的一个表,当小范围扫描时,哈希分区通过索引访问数据的效率高于
范围分区;当扫描值足够大时,范围分区性能好于哈希分区。

6  SQL语句执行时,第一次,ORACLE会对其进行硬解析,会额外站用一些资源,因为要对其语法,语义分析,可以通

过trace文件看到
   alter session set sql_trace=true;
  
7 位图索引,比如scott用户的emp表中的job列,重复很高,可以建立位图索引
   create bitmap index emp_bit_ind on emp(job);
   1)位图索引占用空间比较小
   2)位图索引对于数据重复率高的数据进行AND,OR操作,比B树好,因为都是AND OR运算,对于0和1
   3)对于比如性别,年龄,位置这些类型的字段,用位图索引比较好
   4)位图索引适合OLAP,不大适合OLTP,因为OLTP不断修改,不断写;因为位图索引中一个索引键中可能对应多条

记录,更新时容易发生死锁。
  附:看死锁
    select distinct sid from v$mystat;
  select sid,type,id1,id2,lmode,request,ctime,block from v$lock where sid in(查出来的sid1,查出来的sid2)


8 全文索引
  1)  create index t2_text_idex on t2(name) indextype is ctxsys.context
   select table_name,index_name from user_indexes;
   可以看到创建了dr$开头的4个表,为全文索引的基表,而索引 t2_text_idex本身不占空间。会产生4个基表
DR$_索引名_IDEX$I为一个大表,存储了索引字段通过语法分析器处理后的关键字信息即分割词汇。
   2)全文索引占空间比较大,要注意
    3)得到表和全文索引表占用的空间
       select trunc(bytes/(1024*1024)) table_size_M from user_segments where segment_name='T1' order by

1;
  获得全文索引大小:
    select ctx_report.index_size('T1_IDX') FROM DUAL

  4) 建立全文索引后,比如dml后,不会马上反映到全文索引中去
    alter index t_idx rebuild parameters('sync')
    5)删除记录后,全文索引马上有效果
   6) 而更新记录也需要手工同步
    7) 创建表时,参数指定同步更新索引
       create index t_idex on t(name) indextype is ctxsys.context parameters('sync(on commit)')
 

9 ctx_report工具包,提供关于全文索引的很多东西
  
1 楼 步青龙 2011-11-12  
学习了