Oracle 为何不是条件越多查询越快?

wugao 2009-08-20 05:41:35
我使用下列语句查询,返回结果需要23秒
select *
from smt_scan_half
where rec_datetime>='20090820160000' and rec_datetime<='20090820195959' and pn_no='50-01647-00J' and line_no='N02'code]

而用
[code=SQL]select *
from smt_scan_half
where rec_datetime>='20090820160000' and rec_datetime<='20090820195959' and pn_no='50-01647-00J' code]

只需要4毫秒.
請哪位高人指點一下為什麽?
下面是我的索引的結構
[code=SQL]CREATE INDEX INDEX_SMT_SCAN_HALF5 ON SMT_SCAN_HALF
(REC_DATETIME)
LOGGING
TABLESPACE USERS
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 224384K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;


CREATE INDEX INDEX_SMT_SCAN_HALF6 ON SMT_SCAN_HALF
(LINE_NO, PN_NO)
LOGGING
TABLESPACE USERS
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 671616K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;


CREATE UNIQUE INDEX P_SMT_SCAN_HALF ON SMT_SCAN_HALF
(BAR_NO)
LOGGING
TABLESPACE USERS
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 554752K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;


CREATE INDEX INDEX_SMT_SCAN_HALF1 ON SMT_SCAN_HALF
(LINE_NO, PRO_DATE)
LOGGING
TABLESPACE USERS
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 352896K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;


CREATE INDEX INDEX_SMT_SCAN_HALF2 ON SMT_SCAN_HALF
(PRO_DATE)
LOGGING
TABLESPACE USERS
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 295552K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;


CREATE INDEX INDEX_SMT_SCAN_HALF3 ON SMT_SCAN_HALF
(SFC_NO)
LOGGING
TABLESPACE USERS
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 313088K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;
...全文
161 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
majy 2009-08-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wugao 的回复:]
to majy:除了增加這個索引可以解決之外,沒有其它的辦法了嗎?
[/Quote]

其他办法恐怕就是关系到硬件问题了,比如足够大的内存,把你的所有的数据都放到内存中,那速度就会快很多,合理的索引是解决速度一个相当好的办法,不过,建议你把没用的索引删除
xcj0722 2009-08-21
  • 打赏
  • 举报
回复
學習
wugao 2009-08-21
  • 打赏
  • 举报
回复
to majy:除了增加這個索引可以解決之外,沒有其它的辦法了嗎?
wugao 2009-08-21
  • 打赏
  • 举报
回复
謝謝!
windon 2009-08-20
  • 打赏
  • 举报
回复
语句怎么都不完整
majy 2009-08-20
  • 打赏
  • 举报
回复
缺少一个主要的索引:

create index idx_smt_scan_oth on smt_scan_half(rec_datetime, pn_no, line_no);
c4313848 2009-08-20
  • 打赏
  • 举报
回复
贴一下执行计划

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧