如何提高distinct的sql语句的速度

hfljy_2008 2011-08-02 08:49:38
select distinct a.productspecname, a.productiontype
from ps_lothistory a
where a.oldareaname = 'ASSY'
and a.oldprocessoperationname = 'AM030'
and a.eventname in
('JobOutProducible', 'ReworkProducible', 'ScrapProducible')
and a.eventtime between
to_date('2011-07-14 08:30:00', 'yyyy-mm-dd hh24:mi:ss') and
to_date('2011-07-15 08:30:00', 'yyyy-mm-dd hh24:mi:ss')
and a.site = 'CP1'

sql语句如上,这个语句的运行速度很慢,要1分钟,请问怎么才能提高它的运行速度呢
...全文
506 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyblueseal 2011-08-05
  • 打赏
  • 举报
回复
牛叉人,使用AIM系统
momotou11 2011-08-05
  • 打赏
  • 举报
回复
你起码要给出表结构和其他一些信息,单纯看sql,别人和你得到的信息一样多,没办法进一步优化。
BenChiM888 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hfljy_2008 的回复:]
不行啊,上面两个方法都试了,速度还没有原先的语句快啊。这个sql语句是要在存储过程中运行的。
[/Quote]

那给出你的执行计划,记得要带颜色的,并且有缩进格式的。
yixilan 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 hfljy_2008 的回复:]
select distinct a.productspecname, a.productiontype
from ps_lothistory a
where a.oldareaname = 'ASSY'
and a.oldprocessoperationname = 'AM030'
and a.eventname in
('JobOutProducible', 'Rew……
[/Quote]
表ps_lothistory 的索引有没有?是以哪几个字段建的?
where语句中的查询条件,尽量要往索引上靠。如果实在没有索引,最好建一下。
没有索引,就全表扫描了。
hfljy_2008 2011-08-02
  • 打赏
  • 举报
回复
不行啊,上面两个方法都试了,速度还没有原先的语句快啊。这个sql语句是要在存储过程中运行的。
秋雨飘落 2011-08-02
  • 打赏
  • 举报
回复
select a.productspecname, a.productiontype
from ps_lothistory a
where a.oldareaname = 'ASSY'
and a.oldprocessoperationname = 'AM030'
and a.eventname in
('JobOutProducible', 'ReworkProducible', 'ScrapProducible')
and a.eventtime between
to_date('2011-07-14 08:30:00', 'yyyy-mm-dd hh24:mi:ss') and
to_date('2011-07-15 08:30:00', 'yyyy-mm-dd hh24:mi:ss')
and a.site = 'CP1'
and rowid = (select max(rowid) from ps_lothistory b where a.productspecname= b.productspecname and a.productiontype = b.a.productiontype)
秋雨飘落 2011-08-02
  • 打赏
  • 举报
回复
select a.productspecname, a.productiontype
from ps_lothistory a
where a.oldareaname = 'ASSY'
and a.oldprocessoperationname = 'AM030'
and a.eventname in
('JobOutProducible', 'ReworkProducible', 'ScrapProducible')
and a.eventtime between
to_date('2011-07-14 08:30:00', 'yyyy-mm-dd hh24:mi:ss') and
to_date('2011-07-15 08:30:00', 'yyyy-mm-dd hh24:mi:ss')
and a.site = 'CP1'
and rowid (select max(rowid) from ps_lothistory b where a.productspecname= b.productspecname and a.productiontype = b.a.productiontype)
BenChiM888 2011-08-02
  • 打赏
  • 举报
回复

--试试
SELECT A.PRODUCTSPECNAME, A.PRODUCTIONTYPE
FROM PS_LOTHISTORY A
WHERE A.OLDAREANAME = 'ASSY'
AND A.OLDPROCESSOPERATIONNAME = 'AM030'
AND A.EVENTNAME IN
('JobOutProducible', 'ReworkProducible', 'ScrapProducible')
AND A.EVENTTIME BETWEEN
TO_DATE('2011-07-14 08:30:00', 'yyyy-mm-dd hh24:mi:ss') AND
TO_DATE('2011-07-15 08:30:00', 'yyyy-mm-dd hh24:mi:ss')
AND A.SITE = 'CP1'
GROUP BY A.PRODUCTSPECNAME, A.PRODUCTIONTYPE;

3,499

社区成员

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

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