关于Oracle中大数据量表的索引问题

icedian 2003-06-24 09:41:54
有表A(a1,a2,a3,a4)
a1为PK ,a2建有索引,a3建有索引,a4为数值型
表的数据量为3M条记录

语句1:select count(*) from A where A.a1 like '10001_____'

语句2: select count(*) from A where A.a1 like '10001_____' and A.a2=xxx and A.a3=yyy

语句1取出的数值是语句2的12倍,花的时间语句1 是语句2的1/50,这让我难以理解,请大家不吝赐教
...全文
233 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
icedian 2003-07-04
  • 打赏
  • 举报
回复
感谢各位
black_dragon 2003-06-30
  • 打赏
  • 举报
回复
语句1可能使用使用了快速全索引扫描,执行时只需扫描索引所在的块,不需要扫描数据所在的块。
事实到底如何还是要把执行计划拿出来看。
happyabao 2003-06-30
  • 打赏
  • 举报
回复
如果,你刚执行吧第一条语句,马上就去执行第二条语句,因这两条语句有相似性,系统在执行第二条语句时,采用软分析,而不是硬分析,所以,第二条语句的执行时间比较短。
如果公平的比较两条语句,应在执行完第一条语句后,重启数据库再执行第二条语句,看看在执行时间上是不是差很多。
hqh13 2003-06-28
  • 打赏
  • 举报
回复
1、在pl/sql中分析一下第二个语句的查询计划。以确定确实用到索引
2、建复合索引,第二个语句的查询现在要扫描3个索引。效力低
supershb 2003-06-27
  • 打赏
  • 举报
回复
你可以尝试一下:
把a2,a3的索引建立在不同的磁盘上。

另:你的表只有四个字段,建立太多的索引反而不好。
qinminglei 2003-06-25
  • 打赏
  • 举报
回复
不错,这种情况你应该把执行计划贴出来,才能准确分析。
shuipipi 2003-06-25
  • 打赏
  • 举报
回复
建立复合索引吧~
penitent 2003-06-25
  • 打赏
  • 举报
回复
最好从执行计划上去分析
先看看你的两个语句的执行计划
然后分析一下你的表
analyze table tablename compute;
再看看你的表的执行计划
感觉你的第二个语句用的RBO,没有用到CBO
radish 2003-06-24
  • 打赏
  • 举报
回复
索引的使用的不是越多越好
Michaelyfj 2003-06-24
  • 打赏
  • 举报
回复
那是啊,语句2的条件比较多,要匹配多次,效率更低
icedian 2003-06-24
  • 打赏
  • 举报
回复
不是这样的,现象是:语句2的性能比1要差 ,????
asdf008 2003-06-24
  • 打赏
  • 举报
回复
完全正常阿,建索引是可以大大提高速度的,就比方你在图书馆的书目表中找书和在图书馆馆藏里找书一个道理
Michaelyfj 2003-06-24
  • 打赏
  • 举报
回复
你可以对a1,a2,a3建立组合索引,这样效率会更高

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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