当前位置: 代码迷 >> Oracle技术 >> 求sql优化大神降临。该怎么处理
  详细解决方案

求sql优化大神降临。该怎么处理

热度:215   发布时间:2016-04-24 08:07:00.0
求sql优化大神降临。
select c.u_id, d.status, c.pm_id
  from (select mb.u_id, max(pm_id) pm_id
          from mass_user_mailbox mb
         where mb.user_id = '100009'
         group by mb.u_id) c
  left join mass_user_mailbox d
    on c.u_id = d.u_id
   and c.pm_id = d.pm_id

这是公司之前的一个sql,因为此表数据量很大  现在查询速度超慢,有优化的空间吗, 此表建了两个索引user_id和pm_id

但我查询的时候f5还是全表查询,不知道为啥?  求鞭策。


------解决思路----------------------
1、内层查询的order by可以去掉
2、and trunc(pm.cdate) = to_date('time', 'yyyy-MM-dd')
这样通过函数转化后不会走cdate字段的索引的
可改成and pm.cdate>= to_date('time', 'yyyy-MM-dd') and pm.cdate< to_date('time', 'yyyy-MM-dd')+1
或是改成trunc(cdate)的函数索引
3、cdml_sensky_user 增加id的索引
4、cdml_sensky_user_add增加id的索引
5、not like很容易走全表扫描,根据业务看看有没有啥其他的方式过滤,或是看看不过滤对结果是否有影响
有时增加了条件以为数据量少了会快,但是如果因此不能走索引的话,有点得不偿失
------解决思路----------------------
给出字段的统计信息,和语句的执行计划吧
这样优化才比较有目的和针对性
  相关解决方案