oracle查询强制走多个索引,请问使用多个强制索引如何写?

在Oracle查询中,当面对复杂的多表连接查询时,有时数据库选择的执行计划并不理想,导致全表扫描和性能下降。对于表CMNG_CUSTOM,CMNG_STBCUSTOMVDO和CMNG_CUSTOMINFO,期望强制使用特定索引以提升查询效率。可以通过在查询语句中添加/*+ index */提示来指定索引,例如:SELECT /*+ index(CMNG_CUSTOM INX_CMNG_CUSTOM_DVBCUSTOMID) index(CMNG_STBCUSTOMVDO INX_CMNG_STBCUSTOMVDO_DVBCUSTOMID) index(CMNG_CUSTOMINFO INX_CMNG_CUSTOMINFO_DVBCUSTOMID) */ ...。这将指导优化器使用指定的索引,提高查询速度。
摘要由CSDN通过智能技术生成

id 为 tbl1 的index, uid 为 tbl2 的 index 。

SELECT * FROM tbl1 WHERE id IN (SELECT uid FROM tbl12 where rownum<3263)

使用了 tbl1中的 index 。

SELECT * FROM tbl1 WHERE id IN (SELECT uid FROM tbl12 where rownum<3264)

却采用全表查询。

表 tbl1 的记录数为 464243

表 tbl2 的记录数为 279268

当查询 rownum > 3263 的时候,数据库采用了全表查询,导致查询速度异常的慢。

这个可以使用

SELECT /*+ index(tbl1 INX_TBL1_ID) */* FROM tbl1 WHERE id IN (SELECT uid FROM tbl12 where rownum<3264)

来达到效果。

不过使用中的查询语句是多个表,请问如何写强制使用索引?

实际的SQL为:

SELECT c.DVBCUSTOMID, b.CUSTOMNM, i.TYPENM, h.DISCOUNTNM, b.ADDRESSCONN, b.ADDRESS, b.ZIPCODE, b.MAINTELE,

b.MOBILEPHONE, STBID, ICID, PROP, CLASS

FROM CMNG_CUSTOMINFO b, CMNG_CUSTOM c, CMNG_CUSTOMDISCOUNT h, CMNG_CUSTOMTYPE i, CMNG_STBCUSTOMVDO j, REP_NOSVR_1201 xx

WHERE xx.dvbcustomid = c.dvbcustomid and xx.dvbcustomid = j.dvbcustomid and c.CUSTOMID = b.CUSTOMID

AND c.DISCOUNTTYPE = h.DISCOUNTID AND c.TYPE=i.TYPE

计划策略:

SELECT STATEMENT, GOAL = CHOOSE                        Cost=3427        Cardinality=29001        Bytes=5191179

HASH JOIN                        Cost=3427        Cardinality=29001        Bytes=5191179

TABLE ACCESS FULL        Object owner=SMSGX_DONG        Object name=CMNG_CUSTOMDISCOUNT        Cost=2        Cardinality=13        Bytes=195

HASH JOIN                        Cost=3424        Cardinality=29001        Bytes=4756164

TABLE ACCESS FULL        Object owner=SMSGX_DONG        Object name=CMNG_CUSTOMTYPE        Cost=2        Cardinality=3        Bytes=36

HASH JOIN                        Cost=3421        Cardinality=29001        Bytes=4408152

HASH JOIN                        Cost=1449        Cardinality=29001        Bytes=2581089

HASH JOIN                        Cost=931        Cardinality=27639        Bytes=1160838

TABLE ACCESS FULL        Object owner=SMSGX_DONG        Object name=REP_NOSVR_1201        Cost=8        Cardinality=27639        Bytes=331668

TABLE ACCESS FULL        Object owner=SMSGX_DONG        Object name=CMNG_CUSTOM        Cost=723        Cardinality=464243        Bytes=13927290

TABLE ACCESS FULL        Object owner=SMSGX_DONG        Object name=CMNG_STBCUSTOMVDO        Cost=318        Cardinality=197468        Bytes=9280996

TABLE ACCESS FULL        Object owner=SMSGX_DONG        Object name=CMNG_CUSTOMINFO        Cost=1398        Cardinality=464134        Bytes=29240442

后面三个表 CMNG_CUSTOM, CMNG_STBCUSTOMVDO, CMNG_CUSTOMINFO没有使用预期的索引,导致查询速度非常的慢。以至于应用服务器weblogic无法相应任何请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值