oracle資料型別隱式轉換----- 應急方案
mytun免費使用啦, 2014-11-8做過更新,請更新軟體, (技術支援QQ:123614791)
軟體下載地址
《劍客》
十年磨一劍, 霜刃未曾試。
今日把示君, 誰為不平事?
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下載(雲盤下載)
阿里雲linux5.7安裝oracle必讀 ]
阿里雲的oracle故障解決案例 ]
阿里雲linux安裝oracle常見問題
阿里雲ORACLE最佳化 ]
sql調優工具-mytun之十年磨一劍
阿里雲資料庫遷移方案-不間斷業務
原創 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
原創 qq : 123614791
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-885715/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE中的隱式資料型別轉換(一)Oracle資料型別
- JavaScript 隱式資料型別轉換JavaScript資料型別
- 資料型別的隱式轉換資料型別
- Java資料型別的顯式轉換和隱式轉換Java資料型別
- 資料型別隱式轉換導致的阻塞資料型別
- JavaScript隱式型別轉換JavaScript型別
- MySQL 隱式型別轉換MySql型別
- javascript資料型別隱式和顯式轉換詳解JavaScript資料型別
- Oracle隱式型別轉換導致索引失效Oracle型別索引
- javascript 隱式資料型別轉換程式碼例項JavaScript資料型別
- oracle 資料型別轉換Oracle資料型別
- 欄位的資料型別隱式轉換有關係資料型別
- oracle資料隱式轉換規則Oracle
- C# 隱式型別轉換(轉載)C#型別
- SQL Server資料庫中的資料型別隱式轉換問題SQLServer資料庫資料型別
- 如何實現隱式型別轉換型別
- 談談 MySQL 隱式型別轉換MySql型別
- C++隱式類型別轉換C++型別
- C++隱式型別的轉換C++型別
- C++ 隱式類型別轉換C++型別
- 索引失效系列——隱式型別轉換索引型別
- 有趣的JavaScript隱式型別轉換JavaScript型別
- JavaScript隱式型別轉換趣解JavaScript型別
- 【關於Javascript】--- 隱式型別轉換篇JavaScript型別
- C語言的隱式型別轉換C語言型別
- JavaScript的隱式型別轉換淺析JavaScript型別
- 關於隱式資料型別轉換的一些試驗資料型別
- 從Java的型別轉換看MySQL和Oracle中的隱式轉換(二)Java型別MySqlOracle
- 資料型別,型別轉換資料型別
- Oracle 隱式轉換Oracle
- sql server 資料型別轉換函式SQLServer資料型別函式
- Sql Server 資料型別 轉換 函式SQLServer資料型別函式
- Sql Server資料型別轉換函式SQLServer資料型別函式
- 淺談Oracle中隱式型別轉換規律和影響Oracle型別
- c++隱式型別轉換存在的陷阱C++型別
- 「譯」JavaScript 的怪癖 1:隱式型別轉換JavaScript型別
- 資料型別轉換資料型別
- oracle中date資料型別與timestamp資料型別的轉換Oracle資料型別