??xml version="1.0" encoding="utf-8" standalone="yes"?>久久国产高清,欧美一级三级,视频一区二区在线http://www.aygfsteel.com/xinyoulinglei/category/53700.htmlzh-cnSat, 06 Jul 2013 23:40:21 GMTSat, 06 Jul 2013 23:40:21 GMT60oracle重徏indexhttp://www.aygfsteel.com/xinyoulinglei/articles/401118.htmlLenovo123Lenovo123Mon, 01 Jul 2013 11:29:00 GMThttp://www.aygfsteel.com/xinyoulinglei/articles/401118.htmlhttp://www.aygfsteel.com/xinyoulinglei/comments/401118.htmlhttp://www.aygfsteel.com/xinyoulinglei/articles/401118.html#Feedback0http://www.aygfsteel.com/xinyoulinglei/comments/commentRss/401118.htmlhttp://www.aygfsteel.com/xinyoulinglei/services/trackbacks/401118.html一Q考虑重徏索引的场?/span>
1Q表上频J发生update,delete操作
2Q表上发生了(jin)alter table ..move操作Qmove操作D?jin)rowid变化Q?/p>


二:(x)判断重徏索引的标?/span>
  索引重徏是否有必要,一般看索引是否倾斜的严重,是否费?jin)空_(d)
  那应该如何才可以判断索引是否倾斜的严重,是否费?jin)空_(d)如下Q?br style="line-height: 25px" />1Q?nbsp;       对烦(ch)引进行结构分?br style="line-height: 25px" />Analyze index indexname validate structure;
2, 在执行步?的session中查询index_stats表,不要到别的sessionL?br style="line-height: 25px" />   select height,DEL_LF_ROWS/LF_ROWS from index_stats;
3, 在步?查询出来的height>=4或者DEL_LF_ROWS/LF_ROWS>0.2的场合,该烦(ch)引考虑重徏Q?br style="line-height: 25px" />Example:
   SQL> select count(*) from test_index;
         COUNT(*)
----------
                   2072327
SQL> analyze index pk_t_test validate structure;
Index analyzed
        SQL> select height,DEL_LF_ROWS/LF_ROWS from index_stats;
                     HEIGHT         DEL_LF_ROWS/LF_ROWS
---------- -------------------
                           0
SQL> delete from test_index where rownum<250000;
          249999 rows deleted
        SQL> select height,DEL_LF_ROWS/LF_ROWS from index_stats;
                    HEIGHT                 DEL_LF_ROWS/LF_ROWS
---------- -------------------
                                           0
        SQL> analyze index pk_t_test validate structure;
                Index analyzed
SQL> select height,DEL_LF_ROWS/LF_ROWS from index_stats;
                    HEIGHT                  DEL_LF_ROWS/LF_ROWS
---------- -------------------
                 3                           0.0777430939338362


三:(x)重徏索引的方?/span>
    1Qdrop 原来的烦(ch)引,然后再创建烦(ch)?
    2Qalter index indexname rebuild (online);
    方式一Q耗时_(d)无法?4*7环境中实?br style="line-height: 25px" />    方式二:(x)比较快,可以?4*7环境中实?br style="line-height: 25px" />    使用方式?/p>


四:(x)alter index rebuid内部q程和注意点
    1Qalter index rebuild 和alter index rebuild online的区?br style="line-height: 25px" />(1)        扫描方式不同
Rebuild以index fast full scanQor table full scanQ方式读取原索引中的数据来构Z个新的烦(ch)引,有排序的操作; rebuild online 执行表扫描获取数据,有排序的操作;
Rebuild  方式 (index fast full scan  or  table full scan  取决于统计信息的cost)
Eg1:
SQL> explain plan for alter index idx_policy_id2 rebuild;
Explained
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------
| Id  | Operation               Name           | Rows  | Bytes | Cost  |
---------------------------------------------------------------------
  0 | ALTER INDEX STATEMENT                    999K|  4882K|  3219 |
  1 |  INDEX BUILD NON UNIQUE| IDX_POLICY_ID2        |       |       |
  2 |   SORT CREATE INDEX                       999K|  4882K|       |
  3 |    INDEX FAST FULL SCAN | IDX_POLICY_ID2    999K|  4882K|       |
---------------------------------------------------------------------
Eg2:
SQL>  explain plan for alter index idx_policy_id rebuild;
Explained
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------
| Id  | Operation               Name          | Rows  | Bytes | Cost  |
---------------------------------------------------------------------
  0 | ALTER INDEX STATEMENT                 |  2072K|     9M|   461 |
  1 |  INDEX BUILD NON UNIQUE| IDX_POLICY_ID        |       |       |
  2 |   SORT CREATE INDEX    |                |  2072K|     9M|       |
  3 |    TABLE ACCESS FULL   | TEST_INDEX      2072K|     9M|   461 |


Eg3Q?(注意和Eg1比较)
Rebuil online 方式Q?br style="line-height: 25px" />SQL> explain plan for alter index idx_policy_id2 rebuild online;
Explained
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------
| Id  | Operation               Name           | Rows  | Bytes | Cost  |
---------------------------------------------------------------------|   0 | ALTER INDEX STATEMENT                    999K|  4882K|  3219 |
  1 |  INDEX BUILD NON UNIQUE| IDX_POLICY_ID2        |       |       |
  2 |   SORT CREATE INDEX    |                   999K|  4882K|       |
  3 |    TABLE ACCESS FULL   | TEST_INDEX2       999K|  4882K|  3219 |
(2)        rebuild ?x)阻塞dml操作Qrebuil online 不会(x)ddml操作Q?br style="line-height: 25px" />(3)        rebuild online时系l会(x)产生一个SYS_JOURNAL_xxx的IOTcd的系l(f)时日志表Q所有rebuild online时烦(ch)引的变化都记录在q个表中Q当新的索引创徏完成后,把这个表的记录维护到新的索引中去Q然后drop掉旧的烦(ch)引,rebuild online完成了(jin)?br style="line-height: 25px" />
注意点:(x)
1Q?nbsp;       执行rebuild操作Ӟ需要检查表I间是否_Q?br style="line-height: 25px" />2Q?nbsp;       虽然说rebuild online操作允许dml操作Q但是还是徏议在业务不繁忙时间段q行Q?br style="line-height: 25px" />3Q?nbsp;       Rebuild操作?x)生大量redo log Q?br style="line-height: 25px" />
五:(x)重徏分区表上的分区烦(ch)?/span>
   1Q重建分区烦(ch)引方法:(x)
     Alter index indexname rebuild partition paritionname tablespace tablespacename;
     Alter index indexname rebuild subpartition partitioname tablespace tablespacename;
     Partition name 可以从user_ind_partitions查找
     Tablepace 参数允许alter index操作更改索引的存储空_(d)

 

六:(x)索引状态描q?/span>

在数据字怸查看索引状态,发现有三U:(x)   
  VALID   
  N/A   
  UNUSABLE   

valid:当前索引有效
N/A :分区索引有效
unusable:索引失效

 

七:(x)术语

  高基敎ͼ(x)单理解就是表中列的不同值多
  低基敎ͼ(x)建单理解是表中的列的不同值少
  以删除的叶节Ҏ(gu)量:(x)指得是数据行的delete操作从逻辑上删除的索引节点的数量,要记?a style="line-height: 25px; color: rgb(127,88,105)" rel="nofollow" target="_self">oracle在删除数据行后,?#8220;?#8220;节点保留在烦(ch)引中Q这样做可以加快sql删除操作的速度Q因此oracle删除数据行后可以不必重新q索引?br style="line-height: 25px" />   索引高度Q烦(ch)引高度是指由于数据行的插入操作而生的索引层数Q当表中d大量数据Ӟoracle生成烦(ch)引的新层ơ以适应加入的数据行Q因此,oracle索引可能?层,但是q只?x)出现在索引C产生大量插入操作的区域。Oracle索引的三层结构可以支持数百万的项目,而具?层或是更多层的需要重建?br style="line-height: 25px" />    每次索引讉K的读取数Q是指利用烦(ch)引读取一数据行时所需要的逻辑I/O操作敎ͼ逻辑d不必是物理读取,因ؓ(f)索引的许多内容已l保存在数据~冲区,然而,M数据大于10的烦(ch)引都需要重建?/span>

    那么什么时候重建呢Q我们可以利用analyze index …….. compute statistics 对表q行分析。然后察看dba_indexes中的blevel。这列是说明索引从根块到叶快的别,或是深度。如果别大于等?。则需要重建,如下Q?br style="line-height: 25px" />Select index_name,blevel from dba_indexes where blevel>=4.
   另一个从重徏中受益的指标昄是当该烦(ch)引中的被删除占ȝҎ(gu)的百分比。如果在20%以上Ӟ也应当重建,如下
SQL>anlyze index ------ validate structure
SQL>select (del_lf_rows_len/lf_rows_len)*100 from index_stats where name=’------‘
p看到是否q个索引被删除的癑ֈ比?br style="line-height: 25px" />上面只是判断Q那么,怎样重徏?x)更好呢Q?br style="line-height: 25px" />建烦(ch)引的办法Q?br style="line-height: 25px" />a.        删除q从头开始徏立烦(ch)引?br style="line-height: 25px" />b.        使用alter index -------- rebuild 命o(h)重徏索引
c.        使用alter index -------- coalesce命o(h)重徏索引?br style="line-height: 25px" />下面讨论一下这三种Ҏ(gu)的优~点Q?br style="line-height: 25px" />1).删除q从头开始徏索引Q方法是最慢的Q最耗时的。一般不?br style="line-height: 25px" />2).Alter index ---- rebuild 快速重建烦(ch)引的一U有效的办法Q因Z用现有烦(ch)引项来重建新索引Q如果客h作时有其他用户在对这个表操作Q尽量用带online参数来最大限度的减少索引重徏时将?x)出现的M加锁问题Qalter index ------- rebuild online.但是,׃新旧索引在徏立时同时存在Q因此,使用q种技巧则需要有额外的磁盘空间可临时使用Q当索引建完后把老烦(ch)引删除,如果没有成功Q也不会(x)影响原来的烦(ch)引。利用这U办法可以用来将一个烦(ch)引以到新的表I间?br style="line-height: 25px" />Alter index ------ rebuild  tablespace -----?br style="line-height: 25px" />  q个命o(h)的执行步骤如下:(x)
   首先Q逐一d现有索引Q以获取索引的关键字?br style="line-height: 25px" />   其次Q按新的l构填写临时数据Dc(din)?br style="line-height: 25px" />   最后,一旦操作成功,删除原有索引?wi),降?f)时数据段重命名ؓ(f)新的索引?br style="line-height: 25px" />   需要注意的是alter index ---rebuild 命o(h)中必M用tablespace字句Q以保证重徏工作是在现有索引相同的表I间q行?br style="line-height: 25px" />3).alter index ----- coalesce 使用带有coalesce参数旉建期间不需要额外空_(d)它只是在重徏索引时将处于同一个烦(ch)引分支内的叶块拼合v来,q最大限度的减少?jin)与查询q程中相关的潜在的加锁问题,但是Qcoalesce选项不能用来讲一个烦(ch)引{Ud其他表空间?br style="line-height: 25px" />

八:(x)其他
   1Qtruncate 分区操作和truncate 普通表的区?br style="line-height: 25px" />      Truncate 分区操作?x)导致全局索引失效; truncate 普通表对烦(ch)引没有媄(jing)响;
      Truncate 分区操作不会(x)释放全局索引中的I间Q而truncate 普通表?x)释攄?ch)引所占空_(d)
   2Qrename 表名操作对烦(ch)引没有媄(jing)响,因ؓ(f)rename操作只是更改?jin)数据字典,表中数据行的rowidq没有发生变?/strong>



Lenovo123 2013-07-01 19:29 发表评论
]]>
oracle hinthttp://www.aygfsteel.com/xinyoulinglei/articles/401117.htmlLenovo123Lenovo123Mon, 01 Jul 2013 10:52:00 GMThttp://www.aygfsteel.com/xinyoulinglei/articles/401117.htmlhttp://www.aygfsteel.com/xinyoulinglei/comments/401117.htmlhttp://www.aygfsteel.com/xinyoulinglei/articles/401117.html#Feedback0http://www.aygfsteel.com/xinyoulinglei/comments/commentRss/401117.htmlhttp://www.aygfsteel.com/xinyoulinglei/services/trackbacks/401117.html1. /*+ALL_ROWS*/
表明对语句块选择Z开销的优化方?q获得最?jng)_吐量,使资源消耗最化.
例如:
SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO=’SCOTT’;
2. /*+FIRST_ROWS*/
表明对语句块选择Z开销的优化方?q获得最?jng)_应时?使资源消耗最化.
例如:
SELECT /*+FIRST_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO=’SCOTT’;

3. /*+CHOOSE*/
表明如果数据字典中有讉K表的l计信息,基于开销的优化方?q获得最佳的吞吐?
表明如果数据字典中没有访问表的统计信?基于规则开销的优化方?
例如:
SELECT /*+CHOOSE*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO=’SCOTT’;

4. /*+RULE*/
表明对语句块选择Z规则的优化方?
例如:
SELECT /*+ RULE */ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO=’SCOTT’;

5. /*+FULL(TABLE)*/
表明对表选择全局扫描的方?
例如:
SELECT /*+FULL(A)*/ EMP_NO,EMP_NAM FROM BSEMPMS A WHERE EMP_NO=’SCOTT’;

6. /*+ROWID(TABLE)*/
提示明确表明Ҏ(gu)定表Ҏ(gu)ROWIDq行讉K.
例如:
SELECT /*+ROWID(BSEMPMS)*/ * FROM BSEMPMS WHERE ROWID>=’AAAAAAAAAAAAAA’
AND EMP_NO=’SCOTT’;

7. /*+CLUSTER(TABLE)*/
提示明确表明Ҏ(gu)定表选择扫描的讉KҎ(gu),它只对簇对象有效.
例如:
SELECT /*+CLUSTER */ BSEMPMS.EMP_NO,DPT_NO FROM BSEMPMS,BSDPTMS
WHERE DPT_NO=’TEC304′ AND BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

8. /*+INDEX(TABLE INDEX_NAME)*/
表明对表选择索引的扫描方?
例如:
SELECT /*+INDEX(BSEMPMS SEX_INDEX) USE SEX_INDEX BECAUSE THERE ARE FEWMALE BSEMPMS */ FROM BSEMPMS WHERE SEX=’M';

9. /*+INDEX_ASC(TABLE INDEX_NAME)*/
表明对表选择索引升序的扫描方?
例如:
SELECT /*+INDEX_ASC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS WHERE DPT_NO=’SCOTT’;

10. /*+INDEX_COMBINE*/
为指定表选择位图讉K路经,如果INDEX_COMBINE中没有提供作为参数的索引,选择Z囄(ch)引的布尔l合方式.
例如:
SELECT /*+INDEX_COMBINE(BSEMPMS SAL_BMI HIREDATE_BMI)*/ * FROM BSEMPMS
WHERE SAL<5000000 AND HIREDATE

11. /*+INDEX_JOIN(TABLE INDEX_NAME)*/
提示明确命o(h)优化器用烦(ch)引作问\?
例如:
SELECT /*+INDEX_JOIN(BSEMPMS SAL_HMI HIREDATE_BMI)*/ SAL,HIREDATE
FROM BSEMPMS WHERE SAL<60000;

12. /*+INDEX_DESC(TABLE INDEX_NAME)*/
表明对表选择索引降序的扫描方?
例如:
SELECT /*+INDEX_DESC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS WHERE DPT_NO='SCOTT';

13. /*+INDEX_FFS(TABLE INDEX_NAME)*/
Ҏ(gu)定的表执行快速全索引扫描,而不是全表扫描的办法.
例如:
SELECT /*+INDEX_FFS(BSEMPMS IN_EMPNAM)*/ * FROM BSEMPMS WHERE DPT_NO='TEC305';

14. /*+ADD_EQUAL TABLE INDEX_NAM1,INDEX_NAM2,...*/
提示明确q行执行规划的选择,几个单列烦(ch)引的扫描合v?
例如:
SELECT /*+INDEX_FFS(BSEMPMS IN_DPTNO,IN_EMPNO,IN_SEX)*/ * FROM BSEMPMS WHERE EMP_NO='SCOTT' AND DPT_NO='TDC306';

15. /*+USE_CONCAT*/
Ҏ(gu)询中的WHERE后面的OR条gq行转换为UNION ALL的组合查?
例如:
SELECT /*+USE_CONCAT*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M';

16. /*+NO_EXPAND*/
对于WHERE后面的OR 或者IN-LIST的查询语?NO_EXPAND阻止其Z优化器对其进行扩?
例如:
SELECT /*+NO_EXPAND*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M';

17. /*+NOWRITE*/
止Ҏ(gu)询块的查询重写操?

18. /*+REWRITE*/
可以视图作为参?

19. /*+MERGE(TABLE)*/
能够对视囄各个查询q行相应的合q?
例如:
SELECT /*+MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELET DPT_NO
,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NO
AND A.SAL>V.AVG_SAL;

20. /*+NO_MERGE(TABLE)*/
对于有可合ƈ的视图不再合q?
例如:
SELECT /*+NO_MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELECT DPT_NO,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NO AND A.SAL>V.AVG_SAL;

21. /*+ORDERED*/
Ҏ(gu)表出现在FROM中的序,ORDERED使ORACLE依此序对其q接.
例如:
SELECT /*+ORDERED*/ A.COL1,B.COL2,C.COL3 FROM TABLE1 A,TABLE2 B,TABLE3 C WHERE A.COL1=B.COL1 AND B.COL1=C.COL1;

22. /*+USE_NL(TABLE)*/
指定表与嵌套的q接的行源进行连?q把指定表作为内部表.
例如:
SELECT /*+ORDERED USE_NL(BSEMPMS)*/ BSDPTMS.DPT_NO,BSEMPMS.EMP_NO,BSEMPMS.EMP_NAM FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

23. /*+USE_MERGE(TABLE)*/
指定的表与其他行源通过合ƈ排序q接方式q接h.
例如:
SELECT /*+USE_MERGE(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

24. /*+USE_HASH(TABLE)*/
指定的表与其他行源通过哈希q接方式q接h.
例如:
SELECT /*+USE_HASH(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

25. /*+DRIVING_SITE(TABLE)*/
强制与ORACLE所选择的位|不同的表进行查询执?
例如:
SELECT /*+DRIVING_SITE(DEPT)*/ * FROM BSEMPMS,DEPT@BSDPTMS WHERE BSEMPMS.DPT_NO=DEPT.DPT_NO;

26. /*+LEADING(TABLE)*/
指定的表作接次序中的首?

27. /*+CACHE(TABLE)*/
当进行全表扫描时,CACHE提示能够表的检索块攄在缓冲区~存中最q最列表LRU的最q用端
例如:
SELECT /*+FULL(BSEMPMS) CAHE(BSEMPMS) */ EMP_NAM FROM BSEMPMS;

28. /*+NOCACHE(TABLE)*/
当进行全表扫描时,CACHE提示能够表的检索块攄在缓冲区~存中最q最列表LRU的最q用端
例如:
SELECT /*+FULL(BSEMPMS) NOCAHE(BSEMPMS) */ EMP_NAM FROM BSEMPMS;

29. /*+APPEND*/
直接插入到表的最?可以提高速度.
insert /*+append*/ into test1 select * from test4 ;

30. /*+NOAPPEND*/
通过在插入语句生存期内停止ƈ行模式来启动常规插入.
insert /*+noappend*/ into test1 select * from test4 ;

Lenovo123 2013-07-01 18:52 发表评论
]]>
վ֩ģ壺 | | ƽ| ͨ| | | | | ˫| | Ӫɽ| | Т| | | | Ǩ| ˰| ľ| ʡ| | Ͱ| | | ߺ| ֥| Ͻ| | | ޳| | ɽ| ʳ| | ƽȪ| | | | | | |