首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

索引使用有关问题

2012-01-29 
索引使用问题CREATE TABLE TEST(AVARCHAR2(18 BYTE),BVARCHAR2(18 BYTE))CREATE UNIQUE INDEX PK_TEST ON

索引使用问题
CREATE TABLE TEST(
  A VARCHAR2(18 BYTE),
  B VARCHAR2(18 BYTE)
  )


CREATE UNIQUE INDEX PK_TEST ON TEST
(A,B);


ALTER TABLE TEST ADD (
  CONSTRAINT PK_TEST PRIMARY KEY
 (A, B);
每次插入数据a列值都是相同的,数据很大,当前系统的优化是all_rows

delete test where a='aaa' 执行计划是全表扫描

delete /*+rule*/test where a='aaa' 执行计划 是 利用了a 这个非唯一性范围索引
请问为什么上面基于开销的优化方式没有利用索引


[解决办法]
因为“每次插入数据a列值都是相同的”,然后“delete test where a='aaa' ”实际上等同于delete全表了,这时如是CBO,这时当然只做一次全表扫描最快。
如果用上了索引,那先要扫描索引,再根据rowid去定位一行,这样反而开销大了。
[解决办法]

引用楼主 kingofworl 的帖子:
请问为什么上面基于开销的优化方式没有利用索引

热点排行
Bad Request.