执行DBMS_SQLTUNE包进行sql优化需要有advisor的权限:
SQL>create user dave identified by dave
用户已创建。
SQL>grant connect,resource to dave
授权成功。
SQL>grant advisor to dave
授权成功。
下面简单介绍一下如何优化一条找到的问题语句。
create table bigtab as select rownum as "id",a.* from sys.all_objects a
create table smalltab as select rownum as "id", a.* FROM sys.all_tables a
然后多运行几次下面的脚本,增加表里的数据:
insert into bigtab select rownum as "id",a.* from sys.all_objects a
insert into smalltab select rownum as "id", a.* FROM sys.all_tables a
你这个问题有点难回答,就oracle的hints来说,有的时候使用起来反而效果不好,所以一般并不指定hints,而交给oracle自行选择优化方案来处理。如果确实需要,也是具体分析并反复实验才能找到最佳方法。比如/*+ INDEX_FFS(TABLE INDEX_NAME) */
/*+ INDEX_DESC(TABLE INDEX_NAME)*/
表明对表选择索引降序的扫描方法.
/*+ INDEX(TABLE INDEX_NAME) */
表明对表选择索引的扫描方法.
。。。。。等等。
使用hints只能作为优化查询的措施之一,从根本上解决还要想其他办法,如使用负载均衡、分区表、物化视图、合理的索引等等。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)