作者bohei (run and fall)
看板Database
標題[系統] Oracle決定使不使用INDEX
時間Tue Sep 24 17:28:26 2013
大家好 小弟今天遇到一個非常奇怪的情況
我建立一個新的TABLE 欄位只有一個ID
把rownum放進ID INSERT 五百萬筆資料
也就是TABLE內有ID 1~ ID 5000000
再建立一個INDEX ON ID
接著測試 SELECT ID FROM TABLE WHERE ID=435323
發現執行計劃居然是FULL TABLE SCAN
此時再建立UNIQUE INDEX ON ID
再下一次剛剛的SQL發現執行計劃就走UNIQUE INDEX了
因為這是新的TABLE應該不會有需要analyze的問題..
我覺得這是一個非常基本的情況..不知為何沒使用INDEX?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.65.163.29
1F:→ kobedisel:id column type is? 09/24 22:45
2F:→ iFEELing: 關鍵字 "events 10053" 弄懂這個你就有答案了 09/24 22:48
3F:→ bohei:kobedisel大,我試了varchar,number都有此情形 09/24 22:52
4F:→ bohei:iFEELing,我馬上去看,謝謝! 09/24 22:52
5F:→ kobedisel:iFEELing 大大也是高手,event 10053會產生會解讀 09/25 22:24
6F:→ kobedisel:基本上以cbo的db,你就可以知道oracle為何那麼走 09/25 22:27
7F:→ kobedisel:有幾會的話是否可以跟ifeeling交流一下 09/25 22:28
8F:→ bohei:不好意思,不知道iFEELing大會不會再看這篇..想再請教一下 09/26 16:24
9F:→ bohei:今天我又試了一次普通的index,Oracle居然採用了,我懷疑是不 09/26 16:25
10F:→ bohei:是我上次建錯table,想請問我文章說的那種情形,會有可能發生 09/26 16:25
11F:→ bohei:嗎? (id都不重複,建立非uniuqe的index卻不採用) 09/26 16:26
12F:→ kobedisel:一般來說按照你建的資料筆數,與資料看起來並無重複的 09/26 17:56
13F:→ kobedisel:不管是建unique or normal index按照你的query來說 09/26 17:57
14F:→ kobedisel:應該都是會走index的,除非你where 條件有欄位型態轉換 09/26 17:58
15F:→ kobedisel:不然按照這樣的比數跟資料分布狀態oracle應沒道理走full 09/26 17:59
16F:→ kobedisel:table scan,而且你也不是用bind variable的方式執行 09/26 17:59
17F:→ bohei:嗯...那我懷疑是我當初建立index時下錯table了.. 09/26 18:01
18F:→ bohei:雖然走了一條冤枉路,但學到很多,謝謝樓上幾位大大 09/26 18:01
19F:→ kobedisel:不過當你覺得oracle應該走什麼plan實際上卻不走的話 09/26 18:04
20F:→ kobedisel:就可以使用event 10053去看為何,一般來說我都是用 09/26 18:05
21F:→ kobedisel:oradebug比較多,我比較習慣,印象中alter session set 09/26 18:05
22F:→ kobedisel:event 應該也可以,上網查一下就有,看個人習慣 09/26 18:06
23F:→ kobedisel:而最常用的event就2個 10046 10053這兩個會了,基本上 09/26 18:07
24F:→ kobedisel:大半部分的效能難題都可以解了 09/26 18:07
25F:→ kobedisel:最後推薦你我常看的網路文章就是大陸的老熊跟蓋國強 09/26 18:10
26F:→ kobedisel:這兩個都是oracle ace都很強一個程式強另一個系統熟 09/26 18:10
27F:→ kobedisel:有空可以多多看看這兩人文章或是書,對dba很有幫助的 09/26 18:11
28F:→ bohei:好的!! 謝謝k大 09/26 18:19