作者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