oracle中的索引问题。 这个表中有1亿3千万条数据。检索的数据件数没有超过30%,用索引的速度,比全表检索的速度慢很多。全表检索只用0.56s,而用索引检索根本就没检索出来。有朋友能解释下为什么吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我很确定他走了索引,但是,就是慢。。SELECT STATEMENT, GOAL = ALL_ROWS Cost=2627 Cardinality=1 Bytes=103 SORT GROUP BY Cost=2627 Cardinality=1 Bytes=103 NESTED LOOPS Cost=2626 Cardinality=1 Bytes=103 NESTED LOOPS Cost=2625 Cardinality=1 Bytes=90 MERGE JOIN Cost=2623 Cardinality=1 Bytes=75 SORT JOIN Cost=2619 Cardinality=3 Bytes=174 TABLE ACCESS BY GLOBAL INDEX ROWID Object owner=SB1 Object name=TP_H_SENBETSU_SHIWAKE Cost=2618 Cardinality=3 Bytes=174 INDEX SKIP SCAN Object owner=SB1 Object name=IDX1_TP_H_SENBETSU_SHIWAKE Cost=2613 Cardinality=3 FILTER SORT JOIN Cost=4 Cardinality=141 Bytes=2397 TABLE ACCESS FULL Object owner=SB1 Object name=MP_TOKEI_KENSYU_SYOSAI1 Cost=3 Cardinality=141 Bytes=2397 TABLE ACCESS BY INDEX ROWID Object owner=SB1 Object name=MP_TOKEI_KENSYU_GRP_KIHON1 Cost=2 Cardinality=1 Bytes=15 INDEX RANGE SCAN Object owner=SB1 Object name=MP_TOKEI_KENSYU_GRP_KIHON1_PK Cost=1 Cardinality=1 VIEW PUSHED PREDICATE Object owner=SB1 Cost=1 Cardinality=1 Bytes=13 FILTER SORT AGGREGATE Cardinality=1 Bytes=9 INDEX RANGE SCAN Object owner=SB1 Object name=MP_TOKEI_KENSYU_GRP_KIHON1_PK Cost=1 Cardinality=1 Bytes=9应该是他,可能太乱了呵呵。 INDEX SKIP SCAN 你的数据分布不适合跳扫,新建索引或者调整IDX1_TP_H_SENBETSU_SHIWAKE中字段的顺序 你建立了索引,用不用索引由Oracle决定。 1亿3千万条数据....检索的数据件数没有超过30%,用索引的速度,比全表检索的速度慢很多=================================================================肯定的,这么大的数据量,估计超过1%,就不会使用索引了。走索引的话,先查索引,再根据 rowid 检索主表,单条记录要查多个数据块。所以索引对 selectivity 高的查询更有效。 大虾进来下语法问题 面试归来!ORACLE题目 PL/SQL中变量的复制与使用 请教一个短消息的数据库设计问题 不明白我建的这个oracle函数有什么错误,运行的时候提示程序包或函数get_tablecolumn_except处于无效状态 oracle 如何在线增量备份 如何用批处理在Orcal 10g中创建表空间和数据(急急急急急急急急急急急急急急) 如何用命令同时删除某用户的所有TABLE呢? ORACLE 对话数 表 XXX 发生了变化, 触发器/函数不能读它 ORACLE SQL关于IN的用法的一个疑问 求助:PLSQL使用动态变量的问题
SELECT STATEMENT, GOAL = ALL_ROWS Cost=2627 Cardinality=1 Bytes=103
SORT GROUP BY Cost=2627 Cardinality=1 Bytes=103
NESTED LOOPS Cost=2626 Cardinality=1 Bytes=103
NESTED LOOPS Cost=2625 Cardinality=1 Bytes=90
MERGE JOIN Cost=2623 Cardinality=1 Bytes=75
SORT JOIN Cost=2619 Cardinality=3 Bytes=174
TABLE ACCESS BY GLOBAL INDEX ROWID Object owner=SB1 Object name=TP_H_SENBETSU_SHIWAKE Cost=2618 Cardinality=3 Bytes=174
INDEX SKIP SCAN Object owner=SB1 Object name=IDX1_TP_H_SENBETSU_SHIWAKE Cost=2613 Cardinality=3
FILTER
SORT JOIN Cost=4 Cardinality=141 Bytes=2397
TABLE ACCESS FULL Object owner=SB1 Object name=MP_TOKEI_KENSYU_SYOSAI1 Cost=3 Cardinality=141 Bytes=2397
TABLE ACCESS BY INDEX ROWID Object owner=SB1 Object name=MP_TOKEI_KENSYU_GRP_KIHON1 Cost=2 Cardinality=1 Bytes=15
INDEX RANGE SCAN Object owner=SB1 Object name=MP_TOKEI_KENSYU_GRP_KIHON1_PK Cost=1 Cardinality=1
VIEW PUSHED PREDICATE Object owner=SB1 Cost=1 Cardinality=1 Bytes=13
FILTER
SORT AGGREGATE Cardinality=1 Bytes=9
INDEX RANGE SCAN Object owner=SB1 Object name=MP_TOKEI_KENSYU_GRP_KIHON1_PK Cost=1 Cardinality=1 Bytes=9
应该是他,可能太乱了呵呵。
你的数据分布不适合跳扫,新建索引或者调整IDX1_TP_H_SENBETSU_SHIWAKE中字段的顺序
=================================================================
肯定的,这么大的数据量,估计超过1%,就不会使用索引了。走索引的话,先查索引,再根据 rowid 检索主表,单条记录要查多个数据块。所以索引对 selectivity 高的查询更有效。