当前位置:首页 > 数据库 > Oracle技术

DBMS_SQLTUNE包优化sql提议,但是无效时什么原因

优良自学吧提供DBMS_SQLTUNE包优化sql提议,但是无效时什么原因,DBMS_SQLTUNE包优化sql建议,但是无效时什么原因?SELECT t1.table_name FROM DBA_TABLE T1,DBA_TABLE_BAK T2 WHERE T1.TABLE_NAME=T2.TABLE_NAM

DBMS_SQLTUNE包优化sql建议,但是无效时什么原因?
SELECT t1.table_name FROM DBA_TABLE T1,DBA_TABLE_BAK T2 WHERE T1.TABLE_NAME=T2.TABLE_NAME
AND T1.OWNER='TEST1'
用于做测试的SQL。两张表第一张500万,第二张50万。
用DBMS_SQLTUNE包得到

如下:
GENERAL INFORMATION SECTION
-------------------------------------------------------------------------------
Tuning Task Name                  : 任务_1361
Tuning Task Owner                 : TEST1
Scope                             : COMPREHENSIVE
Time Limit(seconds)               : 1800
Completion Status                 : COMPLETED
Started at                        : 07/14/2014 23:40:11
Completed at                      : 07/14/2014 23:41:51
Number of Statistic Findings      : 1
Number of Index Findings          : 1

-------------------------------------------------------------------------------
Schema Name: TEST1
SQL ID     : 81b1x7jgp45a6
SQL Text   : SELECT t1.table_name FROM DBA_TABLE T1,DBA_TABLE_BAK T2 WHERE
             T1.TABLE_NAME=T2.TABLE_NAME
             AND T1.OWNER='TEST1'

-------------------------------------------------------------------------------
FINDINGS SECTION (2 findings)
-------------------------------------------------------------------------------

1- Statistics Finding
---------------------
尚未分析表 "TEST1"."DBA_TABLE_BA

  Recommendation
  --------------
  - 考虑收集此表的优
    execute dbms_stats.gather_table_stats(ownname => 'TEST1', tabname =>
            'DBA_TABLE_BAK', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,
            method_opt => 'FOR ALL COLUMNS SIZE AUTO');

  Rationale
  ---------
为了选择好的执行计划, 优化程序需

2- Index Finding (see explain plans section below)
--------------------------------------------------
通过创建一个或多个索引可以

  Recommendation (estimated benefit: 100%)
  ----------------------------------------
  -考虑运行可以改进物理方案设计的 Access Advi
    create index TEST1.IDX$$_05510001 on TEST1.DBA_TABLE_BAK('TABLE_NAME');

  Rationale
  ---------
创建推荐的索引可以显著地改进此语句的执行计划。但是, 使用典型的 
 可能比单个语句更可取。通过这种方法可以获得全面的索引建

-------------------------------------------------------------------------------
EXPLAIN PLANS SECTION
-------------------------------------------------------------------------------

1- Original
-----------
Plan hash value: 2664171826

--------------------------------------------------------------------------------------------
| Id  | Operation          | Name          | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |               |    86M|  3129M|       | 21472   (8)| 00:04:18 |
|*  1 |  HASH JOIN         |               |    86M|  3129M|    11M| 21472   (8)| 00:04:18 |
|   2 |   TABLE ACCESS FULL| DBA_TABLE_BAK |   397K|  6606K|       |  2659   (1)| 00:00:32 |
|*  3 |   TABLE ACCESS FULL| DBA_TABLE     |   422K|  8669K|       | 16103   (2)| 00:03:14 |
--------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   1 - access("T1"."TABLE_NAME"="T2"."TABLE_NAME")
   3 - filter("T1"."OWNER"='TEST1')

2- Using New Indices
--------------------
Plan hash value: 4158161278

------------------------------------------------------------------------------------------------
| Id  | Operation             | Name           | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |                |    86M|  3129M|       | 19684   (9)| 00:03:57 |
|*  1 |  HASH JOIN            |                |    86M|  3129M|    11M| 19684   (9)| 00:03:57 |
|   2 |   INDEX FAST FULL SCAN| IDX$$_05510001 |   397K|  6606K|       |   872   (3)| 00:00:11 |
|*  3 |   TABLE ACCESS FULL   | DBA_TABLE      |   422K|  8669K|       | 16103   (2)| 00:03:14 |
------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   1 - access("T1"."TABLE_NAME"="T2"."TABLE_NAME")
   3 - filter("T1"."OWNER"='TEST1')

-------------------------------------------------------------------------------

但是执行了建索引后再执行执行计划仍然没变。

这个是什么原因呢。这个包管用不?
------解决方案--------------------
dbms_sqltune包的优化建议只能作为参考
建议里的第一步——统计信息,要重新采集下

另外,按照执行计划来看,应该在t1和t2的table_name字段上分别建个索引,可以很好地减少逻辑读
(本文来自互联网,不代表搜站(http://www.ylzx8.cn/)的观点和立场)
本站所有内容来自互联网,若本站收录的信息无意侵犯了贵司版权,请给我们来信(ylzx8cn@163.com),我们会及时处理和回复,谢谢