问一个关于索引优化的简单问题

rottenapple 2008-01-11 11:46:44
log表上建了一个联合索引,LogLevel+LogDate
用Toad看
执行Select * from log where logevel ="01"--就会执行Full tabel scan
执行Select * from log where logdate= sysdate --就会执行index skip scan

为什么会出现这种效果?
...全文
96 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
rottenapple 2008-01-25
  • 打赏
  • 举报
回复
嗯,这几天好好看了一下书,明白点了,谢谢啦
xiaodong_1567 2008-01-17
  • 打赏
  • 举报
回复
在cbo下如果检索的数据高到一个百分比
也会用Full tabel scan
rottenapple 2008-01-17
  • 打赏
  • 举报
回复
appid 是 varchar2(4)
tababy 2008-01-16
  • 打赏
  • 举报
回复
appid字段是什么类型?
hailang_maxu 2008-01-15
  • 打赏
  • 举报
回复
select * from log where appid='01' and logdate=sysdate and loglevel=' ';

这样会用到什么啊
shizhu820228 2008-01-15
  • 打赏
  • 举报
回复
标记
ericxieforever 2008-01-12
  • 打赏
  • 举报
回复
看看执行计划,如果你使用的是CBO的话,系统有可能使用full table scan,你可以使用hints提示系统使用index
比如
select /*+index(log,ix_date_level_appid)*/ * from log where appid='01'
hailang_maxu 2008-01-11
  • 打赏
  • 举报
回复
是不是创建函数的索引阿
Petergepeter 2008-01-11
  • 打赏
  • 举报
回复
把INDEX语句,贴出。
rottenapple 2008-01-11
  • 打赏
  • 举报
回复
CREATE INDEX "Test"."IX_DATE_LEVEL_APPID" ON "Test"."LOG" ("APPID", "LOGDATE", "LOGLEVEL")

Select * from log where appid= "01" -- full table scan
Select * from log where logdate = sysdate -- index skip scan

搞不懂了,真奇怪阿。。
还有什么可能?
chenqingyu 2008-01-11
  • 打赏
  • 举报
回复
如果索引是建立在多个列上,比如(列1,列2)

where 列1=XX 
where 列1=XX and 列2=XX
会用到索引

where 列2=XX
不会用到


LZ是不是写反了?

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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