SQL查询数据慢,求优化

anly_hz 2011-08-29 03:43:51
我的表有5000W的数据,建了5个索引,有一个索引感觉没起什么作用,各位大侠帮忙看看
表部分字段:
FLAG varchar2(2)
TIME_STAMP varchar2(14) --存放的时间,格式:yyyymmddhh24miss
。。。。
。。。。

flag字段和time_stamp字段都单独建有索引,当FLAG单独作为查询条件的时候查询速度在3秒左右,但用time_stamp单独作为条件查询是,就得要近3分钟才能出数据,非常不解。

因为现在是测试,只有5天的数据,差不多1天1000万,我想知道在不建立表分区的情况下,应该怎么做优化,提高查询速度

我用的是ORACLE11G,第二版
...全文
131 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
CalvinR 2011-08-30
  • 打赏
  • 举报
回复
找叶子吧
很厉害哦
zengjc 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 anly_hz 的回复:]
写where条件的时候是time_stamp >'20110826000000'或者是time_stamp<某一个值,没有做时间转换
重复的数据flag字段比time_stamp字段要多,flag只有3中状态,time_stamp是以秒为单位,每一个以秒为单位的时间段大概有300条数据
[/Quote]
因为time_stamp字段是varchar2格式的,所以你使用time_stamp >'20110826000000'是不会走索引的,效率当然慢了。
如果你经常使用大于、小于来查询,则需要把这个字段创建成date类型的,或者是nunmber的也成,这样才能使用索引。
建议你去看下关于oracle索引的文章,了解下使用方法。
另,flag上是不是建立的是位图索引?否则不会快的
Dave 2011-08-29
  • 打赏
  • 举报
回复

这么多索引,维护成本估计也不小。 如果表上的insert 和update 事务很多, 速度也会受影响。

是否走索引,SQL 的性能怎么样,可以通过执行计划来查看。

Oracle 执行计划(Explain Plan) 说明
http://blog.csdn.net/tianlesoftware/article/details/5827245
swordadsl 2011-08-29
  • 打赏
  • 举报
回复
能不能把执行计划和脚本贴出来
anly_hz 2011-08-29
  • 打赏
  • 举报
回复
写where条件的时候是time_stamp >'20110826000000'或者是time_stamp<某一个值,没有做时间转换
重复的数据flag字段比time_stamp字段要多,flag只有3中状态,time_stamp是以秒为单位,每一个以秒为单位的时间段大概有300条数据
积木 2011-08-29
  • 打赏
  • 举报
回复

一句不建立表分区,直接就让我退避了。。。不建立表分区?不建立表分区?为啥不建立啊。。
BenChiM888 2011-08-29
  • 打赏
  • 举报
回复
那只能说明
FLAG 字段的重复数据比较少,索引起到了作用。
TIME_STAMP 字段的重复数据较多,索引没起作用。

或者说有可能你建的索引是一个普通的索引但是你在写where条件的时候写成了
to_date(TIME_STAMP,'yyyymmddhh24miss') = xxxx;
这样会导致索引实效。
fzqrf 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 anly_hz 的回复:]

但用time_stamp单独作为条件查询是,就得要近3分钟才能出数据
[/Quote]

索引怎么建的,查询语句是什么样子的?

3,491

社区成员

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

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