資料型別與函式索引-Oracle篇
上篇是MySQL的這篇是Oracle的。總體來說差不多,不一樣的地方我會標出來。
先建立一個表,寫入10條資料。 (MySQL5條就行,Oracle10條其實都不行。原因是Oracle處理覺得10條資料有沒有索引一樣。所以我最後是寫入了1萬條資料)
分別建立索引
同時把T表也建立好。完全和MySQL場景一樣。
然後為了更好的體現,對兩個表都收集一下統計資訊。
接下來看結果。a列是數值型的用到索引。
a列是數值型的,遇到字元自動轉換了。
B列是字元型的,只能是字元型才能用到索引。
B列是字元型的,數值型的不能用到索引。
C列是小數型的,照搬數值型規則。都是可以的。
D列是時間,用時間的寫法。
如果用字串,執行計劃可以,但是實際執行是報錯的。
接下來,沒有條件的關聯。兩個全表。不過由於兩個列有一個是索引列(T表的ID列故意不是),不至於笛卡爾積。cost不大。
當有索引列帶上索引,立刻看到只找一行,相對來說總的cost變化小了大約一半。
條件從w.id換成t.id,驗證最佳化器的SQL改寫。與MySQL一樣。(下一次看PG的估計也是一樣,這是基本邏輯)
都是索引列且型別匹配情況下:效果很好。
當關聯列資料型別不匹配時候:就和沒建立索引是一樣的效果了。
如果型別差距較大,直接報錯。
繼續:w.b是字元型,w.b和t.c關聯。 t.c是小數型別。儘管不匹配但是最終cost和匹配的幾乎一樣。這裡Oracle處理的比MySQL好。
w.c是小數型,w.c和t.b關聯。 t.b是字元型別。條件是w.b字元型。關聯列不匹配,導致一個表全表。
最後看看型別轉換。w.a是數值型,一旦轉換(在等號左邊轉換)就是全表,索引失效。
在T表上給A建立一個函式索引。所以在T表上用同樣的語句,則用到了索引T22.
解決問題的思路就是讓資料型別匹配。大概不匹配時候如下:
改成這樣就可以了。雖然這不是推薦的,但是已經型別不對的場景下的下下策。上上策還是表的型別要選擇對。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2851365/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料型別與函式索引-PostgreSQL篇資料型別函式索引SQL
- 資料型別與函式索引-MySQL篇資料型別函式索引MySql
- oracle函式索引Oracle函式索引
- string型別資料的find函式型別函式
- sql server 資料型別轉換函式SQLServer資料型別函式
- Sql Server 資料型別 轉換 函式SQLServer資料型別函式
- Sql Server資料型別轉換函式SQLServer資料型別函式
- 第 8 節:函式-函式型別與作用域函式型別
- Oracle之函式索引Oracle函式索引
- java 方法修改主函式裡基本資料型別和引用資料型別的區別Java函式資料型別
- Sql Server系列:資料型別轉換函式SQLServer資料型別函式
- CHAR型別函式索引導致結果錯誤型別函式索引
- oracle中date資料型別與timestamp資料型別的轉換Oracle資料型別
- H2資料庫函式及資料型別概述資料庫函式資料型別
- Oracle隱式型別轉換導致索引失效Oracle型別索引
- Oracle中利用函式索引處理資料傾斜案例Oracle函式索引
- Sql Server函式全解(3):資料型別轉換函式和文字影象函式SQLServer函式資料型別
- Sql Server函式全解(三)資料型別轉換函式和文字影像函式SQLServer函式資料型別
- Oracle資料型別Oracle資料型別
- Oracle 資料型別Oracle資料型別
- oracle資料庫常用分析函式與聚合函式的用法Oracle資料庫函式
- PHP:與型別有關的函式PHP型別函式
- MySQL基礎之----資料型別篇(常用資料型別)MySql資料型別
- MySQL系列:資料型別、運算子及函式(5)MySql資料型別函式
- sqlite 資料庫 支援的資料型別 以及常用的函式SQLite資料庫資料型別函式
- oracle資料型別與儲存結構Oracle資料型別
- 資料型別之字串篇資料型別字串
- Oracle索引梳理系列(六)- Oracle索引種類之函式索引Oracle索引函式
- 基本資料型別與字串型別資料型別字串
- TypeScript 函式型別TypeScript函式型別
- 【SQL】18 SQL NULL 函式、SQL 通用資料型別、SQL 用於各種資料庫的資料型別SQLNull函式資料型別資料庫
- Oracle資料型別對應Java型別Oracle資料型別Java
- 【轉】ORACLE資料型別Oracle資料型別
- Oracle anydata資料型別Oracle資料型別
- ORACLE NUMBER資料型別Oracle資料型別
- [轉]oracle資料型別Oracle資料型別
- 資料庫中Date型別的計算 DATEDIFF() 函式資料庫型別函式
- SSIS 資料型別 第二篇:變數的資料型別資料型別變數