行预取(row_prefetch)

行预取(row_prefetch)是一种优化数据库查询的方法,通过预先加载相邻数据行,减少JDBC调用和磁盘I/O次数,从而提高查询效率,降低一致性读的影响。这种技术在处理大量数据时尤其有效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


行预取可以减少fetch的次数,并降低一致性读.

SQL> create table row_prefetch(id int);

表已创建。

SQL> insert into row_prefetch select level from dual connect by level<=1000000;

已创建1000000行。

SQL> commit;

********************************************************************************

SQL> show arraysize
arraysize 15

select * 
from
 row_prefetch where rownum<100


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        8      0.00       0.00          0         11          0          99
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total       10      0.00       0.00          0         11          0      
``` void ipf_core(pel *src_le, pel *src_up, pel *dst, int ipm, int w, int h)//src_le是左边的参考像素,src_up是上边的参考像素 {//dst是输出目标,ipm是测模式,wh是块的宽和高 com_assert((MIN_CU_SIZE <= w) && (MIN_CU_SIZE <= h));//断言语句,使得w和h要比最小的块大,否则强制退出进程,这里最小设置为4 com_assert(ipm < IPD_CNT);//确保ipm测模式的有效性,在66种测模式之内 assert(com_tbl_log2[w] >= 2);//检查w和h是否是2的倍数 assert(com_tbl_log2[h] >= 2); s32 filter_idx_hor = (s32)com_tbl_log2[w] - 2; //Block Size根据块大小确定水平滤波器索引为logw-2 s32 filter_idx_ver = (s32)com_tbl_log2[h] - 2; //Block Size根据块大小确定垂直滤波器索引为logh-2 const s32 filter_range = 10;//先把滤波器range初始化为10 s32 ver_filter_range = filter_range; s32 hor_filter_range = filter_range; // TODO: g_ipf_pred_param doesn't support 128,把超大块的滤波索引到4,即关闭超大块对应的方向滤波 if (filter_idx_hor > 4) { filter_idx_hor = 4;//把索引限制在块的大小为2^(4+2)=128之内 hor_filter_range = 0; // don't use IPF at horizontal direction禁用水平方向滤波 } if (filter_idx_ver > 4) { filter_idx_ver = 4;//把索引限制在块的大小为2^(4+2)=128之内 ver_filter_range = 0; // don't use IPF at vertical direction禁用垂直方向滤波 } const s32 *filter_hori_param = g_ipf_pred_param[filter_idx_hor];//获滤波器参数数组 const s32 *filter_vert_param = g_ipf_pred_param[filter_idx_ver];//获滤波器参数数组 const s32 par_shift = 6; //normalization factor正则化 const s32 par_scale = 1 << par_shift;//64 const s32 par_offset = 1 << (par_shift - 1);//32 #if EIPM//根据测模式调整滤波范围 if ((IPD_DIA_L <= ipm && ipm <= IPD_DIA_R) || (34 <= ipm && ipm <= 50))//这些范围都是对角线类垂直模式 #else if (IPD_DIA_L <= ipm && ipm <= IPD_DIA_R) #endif { // vertical mode use left reference pixels, don't use top reference ver_filter_range = 0;//在这些模式下禁用垂直滤波,减少计算复杂度 } #if EIPM if ((ipm > IPD_DIA_R && ipm < IPD_IPCM) || (ipm > IPD_DIA_R_EXT && ipm < IPD_CNT))//同样的,类水平模式禁用水平滤波 #else if (IPD_DIA_R < ipm) #endif { // horizontal mode use top reference pixels, don't use left reference hor_filter_range = 0; } s32 p_ref_lenth = w + h;//定义参考像素数组长度,把wh拼起来 s32 *p_ref_vector = com_malloc(p_ref_lenth * sizeof(s32));//分配内存(堆) com_mset(p_ref_vector, 0, (w + h) * sizeof(s32));//对内存块的值进初始化,给所有位置都填充0进去 s32 *p_ref_vector_h = p_ref_vector + h;//指向中间w和h连接的地方 for( s32 i = 0; i < w; ++i ) { p_ref_vector_h[i] = src_up[i];//把上边的参考像素放进数组右边 } for( s32 i = 1; i <= h; ++i ) { p_ref_vector_h[-i] = src_le[i - 1];//左边的参考像素放进数组左边 } /*核心处理代码,逐像素加权混合测值*/ for (s32 row = 0; row < h; ++row)//遍历每一 { s32 pos = row * w;//计算当前的起始位置在dst数组中的索引 s32 coeff_top = (row < ver_filter_range) ? filter_vert_param[row] : 0;//判断row是否小于垂直滤波范围,若大于,则垂直滤波参数置0 for (s32 col = 0; col < w; col++, pos++) { s32 coeff_left = (col < hor_filter_range) ? filter_hori_param[col] : 0; s32 coeff_cur = par_scale - coeff_left - coeff_top; s32 sample_val = (coeff_left* p_ref_vector_h[-row - 1] + coeff_top * p_ref_vector_h[col] + coeff_cur * dst[pos] + par_offset) >> par_shift; dst[pos] = sample_val; } } // Release memory com_mfree(p_ref_vector);//释放内存 }```如果我希望在如何选参考像素这个方向进优化,有什么优化建议吗?可以根据哪些因素确定参考像素?
最新发布
04-03
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值