通过锁定统计信息来锁定执行计划

本文介绍了一种解决Oracle数据库中执行计划变化的方法——锁定统计信息。通过收集特定表的统计信息并将其锁定,可以确保SQL执行计划的一致性,提高存储过程的执行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 今天在群里面看到一个消息。提问是这样的  他认为oracle 10g很痛苦,随着数据量的变化,sql的执行计划在不停的改变,导致同一个存储过程,时间点不同,执行效率就不同.
他的问题是有没有好的方法让执行计划不改变,个人认为是锁定统计信息。
如何锁定统计信息,下面来分布说明:

1. 首先收集统计信息:
BEGIN
  DBMS_STATS.GATHER_TABLE_STATS(ownname          => 'LBAS',
                                tabname          => 'DW_BO_ORDER',
                                estimate_percent => 20,
                                method_opt       => 'for all columns size auto',
                                no_invalidate    => FALSE,
                                degree           => 4,
                                granularity      => 'ALL',
                                cascade          => TRUE);
END;
/

BEGIN
  DBMS_STATS.GATHER_TABLE_STATS(ownname          => 'LBAS',
                                tabname          => 'dw_crm_day_user',
                                estimate_percent => 20,
                                method_opt       => 'for all columns size auto',
                                no_invalidate    => FALSE,
                                degree           => 4,
                                granularity      => 'ALL',
                                cascade          => TRUE);
END;
/
2. 查看如下语句的执行计划
 
SELECT *
FROM   DW_BO_ORDER     A,
       DW_CRM_DAY_USER B
WHERE  A.PROD_ID = B.PROD_ID AND
       STATUS_CD = 'C' AND
       BO_ORDER_TYPE = 2;
 
 
3. 使用dbms_stats锁定状态统计信息
 
4. 查看统计信息

 


6 rows selected

统计信息被锁定
 
5. 如果想修改执行计划,就解锁统计信息从新收集
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值