Oracle 同一sql语句在测试和开发环境不同的执行计划

昨天下班前收到开发的邮件,一个执行sql语句执行的很慢,看了执行计划,为未走索引。
收到邮件后,登入到开发环境devdb,执行语句,果真很慢。登入到测试环境uatdb,执行同样的语句,速度很快。
开发和测试的为同一份生产数据导入过来的(都是我做的数据同步),查看了下两边的执行计划,测试的走了索引,开发的未走。此时比较纳闷,为什么一样的语句会走不同的执行计划。
1. 查看两边的索引情况,两边的的索引都一样。
select * from dba_indexes where table_name='tabname'

2. 查看两边的统计信息情况,发现开发环境的统计信息有过更新,测试环境没有。 找到了不一样的地方~~
select table_name,num_rows,a.blocks,a.last_analyzed from dba_tables a where a.table_name='tabname';

3. 在开发环境想办法导入以前的统计信息,但是经过查找没有历史统计信息,此路不通。

4. 经过尝试,最后删除了开发环境的统计信息,发现开始走索引了,执行速度变快。
SQL>dbms_stats.delete_table_stats(ownname => 'xxxxx',tabname => 'tabname') ;

5. 在网上找到了一篇比较好的文章。
http://blog.itpub.net/26892340/viewspace-721935/

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21374452/viewspace-2129358/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/21374452/viewspace-2129358/

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值