首页 > 数据库 > Oracle > oracle数据类型隐式转换----- 应急方案
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
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8494287/viewspace-885715/ ,如需转载,请注明出处,否则将追究法律责任。