Oracle function-based index对于数据更新处理延时问题。
由于不能贴图,我将问题发在Blog上,
http://blog.csdn.net/dutguoyi/archive/2007/06/09/1645762.aspx
数据表tableA,数据结构如下:
Col1 Col2
Aa 0
Bb 1
Cc 1
步骤:
1. 建立Cur1
CURSOR cur1
IS
SELECT Col1 FROM tableA WHERE CEIL (col2) = 0 ORDER BY col3;
2. 建立Cur2
CURSOR cur2
IS
SELECT 一些数据(不列举了) FROM tableA WHERE col2 = 0 AND Col1 = 由Cur1中Col1变量得到的值 ORDER BY col3 FOR UPDATE SKIP LOCKED;
3. Cur1中嵌套Cur2
FETCH cur2 INTO 由Cur1中Col1变量得到的值;
FOR cur_row IN cur2 LOOP
UPDATE tableA SET col2 = 1 WHERE col1 = parameter_col1;
p_count := p_count + 1;
COMMIT
END LOOP;
为了更好的提高查询速度针对Col2列建立了一个function based index,建立的方法如下。Col2列的数据只有1和0两种数据,而且主要是1。
Cur1主要是获取到需要处理的数据。
Cur2主要是获取每一条数据,由于多个程序的调用,所以Cur1中的过滤条件也加了进去,因为某一条数据在一个程序循环过程中可能被另外一个程序执行结束。FOR UPDATE SKIP LOCKED语句的作用是对于数据表更新操作的锁定。
原因分析:可能是function-based index的数据更新有延迟问题,一条已经处理结束的数据状态仍然没有变换为1,导致另外一个程序查询到这条数据然后又进行了一次更新。
解决方案:去掉function-based index。
不知道function-based index是否是这个问题的原因,请解决过类似问题的兄弟多多指点。非常感谢。
参考资料;
Creating a Function-Based Index
http://www.lc.leidenuniv.nl/awcourse/oracle/server.920/a96521/indexes.htm#2943
相关推荐
oracle 索引类型
四、Function-Based索引Function-Based索引允许基于函数的结果创建索引,适用于需要对某个函数结果进行查询的场景。例如,对字符串进行lower()转换后查询。优点:1.
【信息科学与工程学】计算机科学与自动化——第一百五十五篇 缓存系统设计01 基础知识
CPU:拥有 L1/L2/L3 多级缓存,用于暂存即将执行的指令和频繁访问的数据。GPU:包含显存、纹理缓存、常量缓存、指令缓存等,加速图形渲染和通用计算。RAID 卡 / 存储控制器:自带缓存(通常带电池保护),用于合并写操作、加速读写。打印机:内置内存缓存,用于暂存待打印的页面数据,避免反复从电脑传输。光驱 / 蓝光播放器:内部缓存用于平滑读取光盘数据,防止因寻道延迟导致卡顿。操作系统:页缓存(Page Cache):缓存文件系统数据,减少磁盘 I/O。目录缓存(dentry cache):加速路径查找
【管理科学】【金融工程】第三十三篇 企业金融资产(含股票/债券)/固定资产 管理01
编号企业性质行业企业规模企业能力模型配方算法/模型名称数据结构列表算法逐步思考推理的数学方程式及参数列表及参数的值范围时序数学方程式误差/算法复杂度底层规律和理论关系知识和法律法规1民营制造企业制造业中型现金流预测与流动性管理时序预测+统计回归LSTM (长短期记忆网络) + ARIMA, , , , ARIMA(p,d,q): 其中: B: 滞后算子; d∈[0,2] (差分阶数); p∈[0,5]; q∈[0,5]; θ为移动平均系数 ∈[-1,1] LSTM:
oracle index学习总结
Bitmap索引将每个值映射为一个位图,节省存储空间,但不适用于频繁的插入、删除和更新操作。3. Function-Based索引:基于列的一个函数结果创建索引,使得查询可以基于函数的结果进行检索。
Oracle Index 索引介绍
**函数索引(Function-Based Index)** 允许基于列的函数结果创建索引,使得对函数的结果进行查询时,无需实际计算。5.


