oracle MAX函数查询时间太长

anmoi_yang 2009-02-23 03:04:15
SELECT max(date_time) FROM T WHERE where t.column1 = 'aaaa' and t.column2 = '888888'

column1,column2都是index,table中太概有三亿笔记录,有没有更好的优化方法?
...全文
1892 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
代码摆渡人 2009-02-24
  • 打赏
  • 举报
回复
1. 表分区+索引分区
2. 不用max, 改用分析函数试试看。
qq249222923 2009-02-24
  • 打赏
  • 举报
回复
建议:先查询全部数据,大概的看一下date_time应该会大于什么时间,如果date_time也是索引的话,在where条件中加上date_time>某个时间,应该可以提高查询的效率
jdsnhan 2009-02-23
  • 打赏
  • 举报
回复
排序更慢。

混沌君子 2009-02-23
  • 打赏
  • 举报
回复
按日期降序,取第一个,select top 1 date_time from t where ... order by date_time desc
不知道这个的速度会怎么样
oraclelogan 2009-02-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 anmi_yang 的帖子:]
SELECT max(date_time) FROM T WHERE where t.column1 = 'aaaa' and t.column2 = '888888'

column1,column2都是index,table中太概有三亿笔记录,有没有更好的优化方法?
[/Quote]

三个亿的数据啊,
一定要表分区,全文索引了吧!
liulongjin2008 2009-02-23
  • 打赏
  • 举报
回复
建议 1)对表按照date_time字段分区
2) 对索引进行分区
liulongjin2008 2009-02-23
  • 打赏
  • 举报
回复
楼上SQL貌似不对
CathySun118 2009-02-23
  • 打赏
  • 举报
回复
SELECT date_time FROM T WHERE where t.column1 = 'aaaa' and t.column2 = '888888' and rownum=1 order by date_time desc
CathySun118 2009-02-23
  • 打赏
  • 举报
回复
copy错了,sorry
CathySun118 2009-02-23
  • 打赏
  • 举报
回复
如果装服务器版,任选一种类型都会有
当然如果选择“自定义”还需要自己把它圈上

我装的10g客户端,
在装的时候选择“管理员”就行了
也可以选择“自定义”把组件都选上,因为我也不知道哪个是

10g的组件里只看见了oci,没有看见Pro *C/C++的

不过按上面的方法安装以后就可使用proc.exe了
但是没有可视化的procui.exe据说9i和8i原来都有的
不过这个不影响使用的,procui.exe唯一的好处就是配置预编译时要方便一些。

17,377

社区成员

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

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