表结构如下:
-- Create table
create table TEST
(
OBJECT_ID VARCHAR2(15) not null,
OBJECT_NAME VARCHAR2(128),
OBJECT_TYPE NUMBER
)
tablespace SYSTEM
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table TEST
add constraint PK_OBJECT_ID primary key (OBJECT_ID)
using index
tablespace SYSTEM
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Create/Recreate indexes
create index OBJECT_ID_INDEX on TEST (OBJECT_ID DESC)
tablespace SYSTEM
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
create index OBJECT_TYPE on TEST (OBJECT_TYPE)
tablespace SYSTEM
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
create index OBJECT_TYPE_IND on TEST (OBJECT_TYPE, OBJECT_ID)
tablespace SYSTEM
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
表的记录大概有10万-500万条的记录:
需要执行的sql语句为:
select * from (select * from test t where object_type = 3 order by object_id) where rownum < 10
通过观察执行计划为全表扫描,执行的时间大概在2秒以上,并且尝试过使用索引提示也没有作用,请各位高手帮忙看看。
如果我在object_id 上建立一个desc的索引,执行时间大概在1秒以内。
另外:
如果我把object_id 为number类型的话,则查询在0.0n秒。
请各位帮忙看看可以在什么地方可以优化。
如果在生产环境的话,object_id 的类型是很难去变更的,因为要考虑到应用的兼用性是否有问题。