oracle通过在线重定义后,查询效率变慢了,怎么回事
有一张大表,我通过在线重定义的方式对其进行列表分区后,发生耗费、基数、cpu耗费都变大了,这是怎么回事?
在线重定义后,原非分区表的那张表变成了分区表,在同样的条件下,分区后比分区前耗费都变大了,而且两种情况都走了索引,分区表走了局部索引,原来的那张非分区表(我备份了原表)也走了索引。可是分区表的耗费高多了,基本是分区前的3倍。
然后,我直接又建了张分区表,表结构与在线重定义时建的临时用的表一样,然后,直接将我备份表的数据插进去(不采用在线重定义)。完成后,我发现这张表的效率在两样的情况下比非分区要快,无论从哪个方面看,
耗费、基数、cpu耗费、io等等都变小了
两张分区表我只是采用的转移数据的方式不同,然后表名不同,其余的都是一模一样,索引都一样。可是这两张表在同样的查询条件下效率却差了好几倍,差不多是5倍了,这是怎么回事呢
现在无论我怎么弄,都一样,重新备份一张表再用在线重定义,结果还是一样。索引换成全局、索引再分区、重新做表分析这些方法都没用。结果还是一样。
各位高手这是怎么回事呢?在线重定义感觉很方便,可是为什么会出现这种情况呢?
(不好意思,积分是有点少,相信大家估计也是在意的这个,大家共同探讨、学习。)
oracle在线重定义
分区后查询效率变慢
------解决方案--------------------嗯,可能出在索引上。
1、索引碎片;
2、cluster factor;