ITPub博客

首页 > 数据库 > Oracle > oracle数据类型隐式转换----- 应急方案

oracle数据类型隐式转换----- 应急方案

原创 Oracle 作者:dbhelper 时间:2006-12-22 00:29:15 0 删除 编辑


mytun免费使用啦, 2014-11-8做过更新,请更新软件, (技术支持QQ:123614791)

软件下载地址 http://pan.baidu.com/s/1gdiphkB


《剑客》


十年磨一剑, 霜刃未曾试。
今日把示君, 谁为不平事?
  
mytun的意义:让菜鸟变成“强人”
  

一、来北京工作:   
     和很多IT创业者一样, 于2004年5月,我怀揣梦想来到北京,那年正好31岁。 
     那年北京,刚进入互联网泡沫的破灭和非典, IT行业不景气,找一份DBA的工作难度可想而知,幸好我在2003发布一款 《ORACLE备份帮手》的软件,有猎头通过软件的联系方式找到了我,我成功经过冯总面试后,入职慧聪网,开始了我的DBA生涯。 

二、DBA头疼的问题:
     我于2004年上班的第一天,便被派到慧聪网参与《买卖通》的封闭开发了,开始负责SQL优化和结构设计优化,买卖通的开始从1.0到最后5.0,经历了数不清的版本。。。,  后来在2007年香山的一次itpub的会议上,我和阿里巴巴的冯春陪大师交流时,发现大型互联网公司每周都有新版发布,都这样, 哎,dba工作不是啥好活!

三、mytun想法的诞生:
    数据库管理员(DBA)水平层次不齐。如何能高效运维?
   于是我萌生想法:开发一个快速定位问题的工具,把工具脚本高效的集成起来,让菜鸟都可以变成“强人”。
   mytun本含义是  "my tune"。
  于2010年,我开发完成了mytun工具,在慧聪网几十个数据库中测试,部署,改进。。它把我们解放了。
  于2011年我辞去了慧聪网的DBA经理职位,开始了自己的创业之路。

   慧聪网的老同事都亲切的称我:王工(wang yu qiang)QQ:123614791,  呵呵
    mytun鉴证了我十年的DBA之路, 也包含了为慧聪网而奋斗的兄弟们身影,如今已各奔东西,你们还好吗?

四、mytun的分享:

mytun下载(云盘下载)
  http://pan.baidu.com/s/1gdiphkB    



阿里云linux5.7安装oracle必读     http://bbs.aliyun.com/read/180238.html?spm=0.0.0.0.DWXVj6]http://bbs.aliyun.com/read/180238.html?spm=0.0.0.0.DWXVj6


阿里云的oracle故障解决案例                http://bbs.aliyun.com/read/180238.html?spm=0.0.0.0.DWXVj6]http://bbs.aliyun.com/read/181057.html?spm=0.0.0.0.DWXVj6


阿里云linux安装oracle常见问题          http://bbs.aliyun.com/read/180907.html?spm=0.0.0.0.DWXVj6    


阿里云ORACLE优化                     http://bbs.aliyun.com/read/181443.html?spm=0.0.0.0.LX9qeR]http://bbs.aliyun.com/read/181443.html?spm=0.0.0.0.LX9qeR


sql调优工具-mytun之十年磨一剑     http://bbs.aliyun.com/read/181774.html?spm=0.0.0.0.4ePRRO 


阿里云数据库迁移方案-不间断业务   http://bbs.aliyun.com/read/181568.html?spm=0.0.0.0.wiBrUZ






原创 xjwyq28@hotmail.com qq : 123614791
场景:
1. 数据列类型 和 输入值 类型 不一致
2. 已有列的常规index不能被使用,访问都是 TABLE ACCESS (FULL)。
3. 程序代码不能立刻修正。


解决 : 产生to_number(列)的 函数index, 却能够被应用, 避免一场数据库的灾难。


---------------- oracle数据隐式转换---- 应急方案-to_number(列) 函数index-----------------------------------------------

1. 列为数值型。
where ml_id= '36837053' 可以使用 index
where ml_id = 36837053 可以使用 index

2. 列为字符型varchar2 。
var_col='36837053' 可以使用 index

where var_col= 36837053 ; 不能用上其列index

(重要:产生to_number(列)的index 却可以被应用===》 在不能立刻改程序代码的情况下, 应急方案。 )



---------------------------------------- 明细测试如下-------------------------------------------------
create table TMP
(
ML_ID NUMBER(38) not null,
L_TYPE VARCHAR2(20),
OP_NAME VARCHAR2(20),
OP_ID VARCHAR2(1000),
OP_SQL VARCHAR2(1000),
PROVIDERID NUMBER(12) not null,
OPERATOR VARCHAR2(40),
OP_DATE TIMESTAMP(6),
LOG_TYPE CHAR(1),
VAR_COL VARCHAR2(40)
)


1. 当列为数值型。


select ml_id from TMP where ml_id='36837053'

select ml_id from TMP where ml_id = 36837053

create index TMP_ml_id on b_log_his200611_2(ml_id) tablespace newhcindex;


select ml_id from TMP where ml_id='36837053'
/

ML_ID
----------
36837053

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=1 Card=1 Bytes=6)
1 0 INDEX (RANGE SCAN) OF 'TMP_ML_ID' (INDEX) (Cost=1 Card=1 Bytes=6)

Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
4 consistent gets
0 physical reads


select ml_id from TMP where ml_id = 36837053

ML_ID
----------
36837053

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=1 Card=1 Bytes=6 )
1 0 INDEX (RANGE SCAN) OF 'TMP_ML_ID' (INDEX) (Cost=1 Card=1 Bytes=6)


Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
4 consistent gets




2. 当列为字符型。
create table tmp as select * from b_log_his200611_2

alter table tmp add var_col varchar2(40);

update tmp set var_col = ml_id;

select ml_id, var_col from tmp

select ml_id from tmp where var_col='36837053'

create index tmp_var_col on tmp(var_col) tablespace newhcindex;


select ml_id from tmp where var_col='36837053'
/

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=1 Card=10 Bytes=350)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TMP' (TABLE) (Cost=1 Card=10 Bytes=350)
2 1 INDEX (RANGE SCAN) OF 'TMP_VAR_COL' (INDEX) (Cost=1 Card=7946)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
5 consistent gets


SQL> select ml_id from tmp where var_col= 36837053 ;
ML_ID
----------
36837053
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=3 Card=10 Bytes=350)
1 0 TABLE ACCESS (FULL) OF 'TMP' (TABLE) (Cost=3 Card=10 Bytes =350)
Statistics
----------------------------------------------------------
165 recursive calls
0 db block gets
9628 consistent gets
0 physical reads

select /*+ RULE INDEX(A tmp_var_col) */ A.ml_id from tmp A where A.var_col= 36837053
/
SQL> /
ML_ID
----------
36837053
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=HINT: RULE
1 0 TABLE ACCESS (FULL) OF 'TMP' (TABLE)

Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
9597 consistent gets


create index tmp_var_col_tonumber on tmp(to_number(var_col)) tablespace newhcindex;

select ml_id from tmp where var_col= 36837053
/
ML_ID
----------
36837053
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=1 Card=10 Bytes=350)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TMP' (TABLE) (Cost=1 Card=10 Bytes=350)
2 1 INDEX (RANGE SCAN) OF 'TMP_VAR_COL_TONUMBER' (INDEX) (Cost=1 Card=7946)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
5 consistent gets
0 physical reads


原创 xjwyq28@hotmail.com qq : 123614791


[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8494287/viewspace-885715/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2017-10-14

  • 博文量
    651
  • 访问量
    392126