场景描述:
现oracle数据库有T表,其中有ID、BATCHID两个字段添加了普通索引。
由于数据增长较快,目前该表中有400W数据。因此设置了一个定时job每天执行一次,该job负责将数据中录入日期早于两天前的数据insert到备份历史表中,同时使用delete语句删除T表中超期数据。问题:
目前T表中数据为20W左右,但是对无索引的字段做为条件查询时,仍很慢。例如,以某非索引字段A查询用时60s(select * from T where A='' ),查询数据总量时用时87S(select count(*) from T),请问是因为delete语句的原因吗?对于该类需求该如何操作呢?谢谢。delete查询慢
现oracle数据库有T表,其中有ID、BATCHID两个字段添加了普通索引。
由于数据增长较快,目前该表中有400W数据。因此设置了一个定时job每天执行一次,该job负责将数据中录入日期早于两天前的数据insert到备份历史表中,同时使用delete语句删除T表中超期数据。问题:
目前T表中数据为20W左右,但是对无索引的字段做为条件查询时,仍很慢。例如,以某非索引字段A查询用时60s(select * from T where A='' ),查询数据总量时用时87S(select count(*) from T),请问是因为delete语句的原因吗?对于该类需求该如何操作呢?谢谢。delete查询慢
之前我在网上查了一下,我感觉也是这个原因。我看了一下解决方案,基本都是建议truncate表,但是实际应用中,该表需保存最近两天的数据,且数据会被前端实时查询,怎样解决高水位线重置?
之前我在网上查了一下,我感觉也是这个原因。我看了一下解决方案,基本都是建议truncate表,但是实际应用中,该表需保存最近两天的数据,且数据会被前端实时查询,怎样解决高水位线重置?有没有这方面的经验分享?谢谢
alter table t enable row movement;
alter table t shrink space;