ITPub博客

首页 > 数据库 > Oracle > Oracle 同一sql语句在测试和开发环境不同的执行计划

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

原创 Oracle 作者:kakaxi9521 时间:2016-11-30 10:23:18 0 删除 编辑

昨天下班前收到开发的邮件,一个执行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博客 ” ,链接:https://blog.itpub.net/21374452/viewspace-2129358/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-04-13

  • 博文量
    136
  • 访问量
    179046