数据量200W。。
需要取用户最迟时间的那条记录

解决方案 »

  1.   

    不妨考虑一下分析函数,这个只要一次扫描就可以了select * from (
    select t.*, row_number() over(partition by fk_user_id order by c_start desc) rn 
    )
    where rn = 1 
      

  2.   

    别用子查询,用inner join 关联下,看看效果,若果索引正确的话,查询应该很快 
      

  3.   

    改成(p.c_start,p.fk_user_id) in (……),子查询里的where条件就不要再关联p了,另外对fk_user_id建了索引没有
      

  4.   

    再看下,fk_user_id可能都不需要在in前的括号里,你这个逻辑是查指定用户的最后记录,还是不指定不限用户的最后记录,这两个逻辑语句不同