一次隐藏较隐蔽的SQL优化问题----不要轻易的忽视count(列)
xjwyq28@hotmail.com 原创 qq: 1236147911. 场景说明:stockpile ----IC卡的供求信息xh-- 型号-----字符型xh 列是 可为null的index SP_XH, 是函数index, 定义如下create index SP_XH on stockpile (upper(xh));注意: ( xh 列是 可为null的,会多读一次表 如果xh上带not null 的约束,只读index 不读表 )高频度查询SQLselect /*+ INDEX(s SP_XH) */ count(s.xh) from stockpile swhere upper(s.xh) like 'TL431%'COUNT(S.XH)-----------1868752. 问题出现: 读完index SP_XH 统计出数量后, 为何有多读一次STOCKPILE, 幸好它对性能的恶化程度还
其中一个mview失败,一个命令来剔除失败mview的所需的log
xjwyq28@hotmail.com 原创场景: 1. 分布式数据库通过mview同步, 一个主表被多个mview来刷取数据。2. 当其中一个含 mview的数据库失败,其上的那个mview停止刷新。2. 坏了一个 mview , 主表的mlog$xxxx表的数据因为有一个没刷, 而不删除,主表的mlog$xxxx表不断变大。3. mlog$xxxx 不断变大 , 影响其它正常的mview的刷新非常速度, 且iowait严重。解决: 1. 在建主表库上使用DBMS_MVIEW.PURGE_LOG() 可以 删除mlog$中log (最近最少刷新的mview所需log), 那个失败的mview一般情况下就是最近最少刷新(least recently refreshed) 的(根据实际情况
oracle数据类型隐式转换----- 应急方案
原创 xjwyq28@hotmail.com qq : 123614791 场景: 1. 数据列类型 和 输入值 类型 不一致2. 已有列的常规index不能被使用,访问都是 TABLE ACCESS (FULL)。3. 程序代码不能立刻修正。解决 : 产生to_number(列)的 函数index, 却能够被应用, 避免一场数据库的灾难。---------------- oracle数据隐式转换---- 应急方案-to_number(列) 函数index-----------------------------------------------1. 列为数值型。 where ml_id= '36837053' 可以使用 indexwhere ml_id = 36837053 可以使用 index2. 列为字符型varchar2 。 var_col='36837053' 可