您的位置:首页 > 数据库

如何优化以下的一个sql语句

2008-06-19 14:50 453 查看
表结构如下:

--Createtable

createtableTEST

(

OBJECT_IDVARCHAR2(15)notnull,

OBJECT_NAMEVARCHAR2(128),

OBJECT_TYPENUMBER

)

tablespaceSYSTEM

pctfree10

pctused40

initrans1

maxtrans255

storage

(

initial64K

minextents1

maxextentsunlimited

);

--Create/Recreateprimary,uniqueandforeignkeyconstraints

altertableTEST

addconstraintPK_OBJECT_IDprimarykey(OBJECT_ID)

usingindex

tablespaceSYSTEM

pctfree10

initrans2

maxtrans255

storage

(

initial64K

minextents1

maxextentsunlimited

);

--Create/Recreateindexes

createindexOBJECT_ID_INDEXonTEST(OBJECT_IDDESC)

tablespaceSYSTEM

pctfree10

initrans2

maxtrans255

storage

(

initial64K

minextents1

maxextentsunlimited

);

createindexOBJECT_TYPEonTEST(OBJECT_TYPE)

tablespaceSYSTEM

pctfree10

initrans2

maxtrans255

storage

(

initial64K

minextents1

maxextentsunlimited

);

createindexOBJECT_TYPE_INDonTEST(OBJECT_TYPE,OBJECT_ID)

tablespaceSYSTEM

pctfree10

initrans2

maxtrans255

storage

(

initial64K

minextents1

maxextentsunlimited

);

表的记录大概有10万-500万条的记录:

需要执行的sql语句为:

select*

from(select*fromtesttwhereobject_type=3orderbyobject_id)

whererownum<10


通过观察执行计划为全表扫描,执行的时间大概在2秒以上,并且尝试过使用索引提示也没有作用,请各位高手帮忙看看。

如果我在object_id上建立一个desc的索引,执行时间大概在1秒以内。

另外:

如果我把object_id为number类型的话,则查询在0.0n秒。

请各位帮忙看看可以在什么地方可以优化。

如果在生产环境的话,object_id的类型是很难去变更的,因为要考虑到应用的兼用性是否有问题。




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: