大数据量选择和删除问题?
比如对于一张表,数据量可以达到数百万,表中有datetime类型的时间字段。当数据量超过阈值(假设阈值是500万),现在实际达到550万,希望能按datetime字段将最早时间的50万记录删除。
该用什么方法好?如果单存的按datetime字段排序,再删除前面的50万记录,排序的过程会相当耗时。有什么好的办法可以解决这个问题?
[解决办法]
是否支持TOP?在datetime字段上建立索引
[解决办法]
如何精确来算肯定不会太快。或许可以直接把要求改为 删除XXXX日期之前的。比如你表中550万数据是两年的,则删除 50/550*(365*2)=65天。 删除前 65天则会比较快。但显然不精确。特别是每天,每月记录数无规律的情况下则无法用这种近似法。
[解决办法]
50万条记录要删除,锁够不够?删除记录的时候停应用吗?数据库有日志的吧,不停应用的话碰上锁不够再回滚,时间就没底了。INFORMIX的长处不在批处理的。不知道你的INFORMIX是什么版本的,不过根据我的经验,不要想删除了,将数据需要保存的数据UNLOAD出来,将表删除重建,再将数据UNLOAD进去,速度绝对比你做DELETE快。
[解决办法]
我觉得按2楼的方式,比如按时间删除会比较方便,因为一般的数据保存都是有时间限制的,比如保留最近1个月,或6个月,或1年之类的数据。
这样本身表也可以按时间分片,删除就会更加容易。
[解决办法]
1、上面很多写法完全是:ms-sql的语法写法,根本不是informix的语法写法。
2、通常的大数据量的操作。因为我们是零售行业的企业,所以销售流水的数量可想而知了!通常的做法是unload和load。unload后,重新建表,然后load进去!