首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

求解不带条件1.3秒,带条件0.016秒解决方法

2013-08-09 
求解不带条件1.3秒,带条件0.016秒在测试中,写错代码将SEQ自增长到了60级万,突然发现select * from account

求解不带条件1.3秒,带条件0.016秒
在测试中,写错代码将SEQ自增长到了60级万,突然发现select * from accounts_roles 这样要1.5-3秒,好吧里面只有5条数据。
手动将SEQ改回来后,依旧发现要很久,但是如果select * from accounts_roles where id>0只要0.016秒。

表里只有ID主键,通过触发器ID自增长。
求解怎么怎么才能弄回来。。。百度的下好像要做什么表分析?用的11G。 Oracle?11g select
[解决办法]

-- 不知道楼主听说过“高水位线”这一说。
-- 你可以简单这么理解:类似于涨潮(或洪水)后,湖面曾经水位最高位置留下的痕迹。
-- 表也有这样的说法,具体请参数:
http://www.cnblogs.com/linjiqin/archive/2012/01/15/2323030.html

-- 当你删除表其记录(只剩下5条记录)时,表的高水位线默认是没有变化的,此时,
-- 如果你select * from accounts_roles要走全表扫描,且扫描同样多的数据块,
-- 所以你会感觉执行效率跟没删除记录行时差别不大。

-- 而你如果select * from accounts_roles where id>0的时候,表走的是ID主键索引,当然就不太受表的高水位线影响。

[解决办法]
引用:
-- 不知道楼主听说过“高水位线”这一说。
-- 你可以简单这么理解:类似于涨潮(或洪水)后,湖面曾经水位最高位置留下的痕迹。
-- 表也有这样的说法,具体请参数:
http://www.cnblogs.com/linjiqin/archive/2012/01/15/2323030.html

-- 当你删除表其记录(只剩下5条记录)时,表的高水位线默认是没有变化的,此时,
-- 如果你select * from accounts_roles要走全表扫描,且扫描同样多的数据块,
-- 所以你会感觉执行效率跟没删除记录行时差别不大。

-- 而你如果select * from accounts_roles where id>0的时候,表走的是ID主键索引,当然就不太受表的高水位线影响。


楼上分析到位,楼主可以通过收缩或重建表的方式解决空闲空间的问题!

----收缩表
alter table accounts_roles enable row movement;--启动行移动;
alter table accounts_roles shrink space cascade;--收缩空间;
alter table accounts_roles disable row movement;--关闭行移动;

热点排行