資料型別與函式索引-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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料型別與函式索引-MySQL篇資料型別函式索引MySql
- 資料型別與函式索引-PostgreSQL篇資料型別函式索引SQL
- string型別資料的find函式型別函式
- Oracle索引梳理系列(六)- Oracle索引種類之函式索引Oracle索引函式
- Oracle 資料型別Oracle資料型別
- oracle資料庫常用分析函式與聚合函式的用法Oracle資料庫函式
- sql server 資料型別轉換函式SQLServer資料型別函式
- 第 8 節:函式-函式型別與作用域函式型別
- 【轉】ORACLE資料型別Oracle資料型別
- Oracle anydata資料型別Oracle資料型別
- ORACLE NUMBER資料型別Oracle資料型別
- Oracle資料型別對應Java型別Oracle資料型別Java
- Oracle的number資料型別Oracle資料型別
- Oracle OCP(19):資料型別Oracle資料型別
- MySQL基礎之----資料型別篇(常用資料型別)MySql資料型別
- TypeScript 函式型別TypeScript函式型別
- 【SQL】18 SQL NULL 函式、SQL 通用資料型別、SQL 用於各種資料庫的資料型別SQLNull函式資料型別資料庫
- oracle 10g函式大全–日期型函式Oracle 10g函式
- 資料型別之字串篇資料型別字串
- 基本資料型別與字串型別資料型別字串
- Oracle分析函式與視窗函式Oracle函式
- Oracle字串資料型別簡述Oracle字串資料型別
- 編號函式 自定義函式 集合型別 表的優化 資料傾斜函式型別優化
- Oracle優化案例-自定義函式索引(五)Oracle優化函式索引
- SSIS 資料型別 第二篇:變數的資料型別資料型別變數
- 常見python資料型別及其相對應的函式Python資料型別函式
- Java中的基本資料型別與引用資料型別Java資料型別
- golang基礎語法,定義函式型別 為已存在的資料型別起別名Golang函式資料型別
- Oracle和sqlserver資料型別對應OracleSQLServer資料型別
- Oracle基本資料型別儲存格式淺析——RAW型別Oracle資料型別
- Python 序列型別以及函式引數型別Python型別函式
- Oracle 19c中基於函式的索引Oracle函式索引
- TypeScript入門1:註釋、變數常量、資料型別、函式TypeScript變數資料型別函式
- 可變資料型別不能作為python函式的引數資料型別Python函式
- MOGDB/openGauss的txid_snapshot 資料型別和相關函式資料型別函式
- Golang 中函式作為值與型別(轉載)Golang函式型別
- PostgreSQL:字元——型別及函式SQL字元型別函式
- 胡說-JavaScript函式型別JavaScript函式型別