我有个问题,我需要优化一个oracle中的存储过程.
这存储过程是要操作1张拥有上万条数据的表,操作的类容就是,根据不同的查询条件获取到查询结果的count值,而这存储过程中有几十条这样的select语句,每次执行一次需要等很久,我已经用过建立索引,count(*)改为count(rowid),创建视图,动态SQL这些办法了但效果不明显,之所以请问大家是因为在sqlserver中同样的这种写法,运行却很快,而orcle却很慢 就不知道为什么了
这存储过程是要操作1张拥有上万条数据的表,操作的类容就是,根据不同的查询条件获取到查询结果的count值,而这存储过程中有几十条这样的select语句,每次执行一次需要等很久,我已经用过建立索引,count(*)改为count(rowid),创建视图,动态SQL这些办法了但效果不明显,之所以请问大家是因为在sqlserver中同样的这种写法,运行却很快,而orcle却很慢 就不知道为什么了
如果不是,那么有两种方法,一是建索引,建一个where条件和group by条件以及查询值的组合索引,看看执行效率会不会提高。
二是针对这个procedure建个物化视图,将所有的查询结果union all起来,定时刷新后,直接从视图取数据。想问下LZ的环境是什么样子的,才上W条数据,查询就跑不动,也太弱了点,是不是之前有过大量数据导致HWM过高哦?将这张表移动一下表空间看看。