About me:Oracle ACE pro,optimistic,passionate and harmonious. Focus on ORACLE,MySQL and other database programming,peformance tuning,db design, j2ee,Linux/AIX,Architecture tech,etc
全部博文(169)
发布时间:2024-05-08 17:07:57
经常碰到一些分区表里的分区统计信息num_rows=0,从而导致执行计划不准,特别是笛卡尔积。这个主要是灌入了数据,
未及时更新分区统计信息。
另外,没有数据的分区,不要收集统计信息,也就不会导致num_rows=0的问题,就算有数据,未收集分区统计信息,内部
也会采样,比较准确。
为什么导致num_rows=0,这个主要和收集统计信息的语句有关:
1)一般的收集语句,没有指定pname,会导致num_rows=0问题
exec dbms_stats.gather_table_stats(ownname => user,tabname=>'part_tab',no_invalidate => false);
2)指定pname,会收集指定分区统计信息,也会更新全局表统计信息,不会有num_rows=0问题,
未收集的分区如果有数据,内部会采样,比较准确,比num_rows好。
......【阅读全文】
发布时间:2024-05-06 15:29:59
本文主要讲解如何从一个表里快速随机获取前N行的方法,用最少IO,利用索引的快速扫描,快速从表里获取随机的前N行数据。
......【阅读全文】
发布时间:2024-04-29 09:14:53
一般情况下LIKE查询有三种情况:
1)%后通配可以走INDEX RANGE SCAM,
2)%前通配不能走INDEX RANGE SCAN,如果数据不能全部从索引里获取,还需要回表,则走全表扫描
3)%前通配不能走INDEX RANGE SCAN,如果数据全部从索引里获取可以走INDEX FAST FULL SCAN
......【阅读全文】
发布时间:2024-04-23 16:03:51
背景:一般情况下,如果子查询里含有OR或外面的WHERE条件含有OR,如果走不了disjunctive subquery unnest,则会走FILTER,效率较低,
对符合条件的disjunctive subquery,ORACLE CBO能够进行unnest,由隐含参数_optimizer_unnest_disjunctive_subq控制。
本次讨论的就是将OR子查询改写为JOIN,构造等值条件,让原来走FILTER的执行计划走HASH JOIN,大幅度提高效率。
......【阅读全文】
发布时间:2024-04-22 17:25:21
子查询转换的subquery unnest是数据库一种重要的查询转换技术,ORACLE作为有着最强大优化器(CBO)的数据库,同样在子查询转换方面有很多技术,当然限制也
较多,本文详细讲解子查询里有OR的查询转换技术,利用ORACLE CBO自身的两大查询转换技术以及手动改写方法,使用三大方法,助力OR子查询性能起飞。......【阅读全文】