redis通过rownum分批从orace数据库读取数据——内存数据库存在重复数据得问题解决
rownum可参考:https://blog.csdn.net/YellowStar5/article/details/86506142
关于redis 刷参sql问题:
1、没加排序(会导致部分数据重复,部分数据丢失,但数据总量一致)
select skey, svalue from
(select sp_code || oper_code skey,
start_date || '$$' || end_date || '$$' || sett_ratio svalue, rownum rum from TABLE1
where rownum <= iEnd)
where rum >= iStart
2、加排序(不会出现此问题)
select skey, svalue from
(select skey, svalue, rum from
(select skey, svalue, rownum rum from (select sp_code || oper_code skey, start_date || '$$' || end_date || '$$' || sett_ratio svalue from TABLE1 order by skey))
where rum <= iEnd)
where rum >= iStart
测试:
SELECT /*+parallel(10)*/* FROM (select sp_code || oper_code skey, start_date || '$$' || end_date || '$$' || sett_ratio svalue, rownum rum from TABLE1) WHERE skey='1000082272292600' ; **-- rum 1256762**
SELECT /*+parallel(10)*/* FROM (select sp_code || oper_code skey, start_date || '$$' || end_date || '$$' || sett_ratio svalue, rownum rum from TABLE1) WHERE skey='1000082272292600' **-- rum 1255836**
结论
------select * from TABLE1 不加order by 每次查出来的结果顺序不一样 而导致查询结果的 rownum 不定,导致部分数据重复,部分数据丢失,但数据总量一致因此先需先order by 再用 rownum卡范围