提供例题,以及分析步骤!!!谢谢大家提供方法

解决方案 »

  1.   

    Java代码 
    例题:
      
        SELECT  
            COUNT(id)   
        FROM  
            USER   
        order by  
            id  
      
      
    select  
            *   
        from  
            ( select  
                row_.*,  
                rownum rownum_   
            from  
                ( select  
                    id ,   
                    user_number,  
                    user_name,  
                    user_password,       
                    sex,  
                    Registered_time,  
                    last_login_time,  
                    post  
                        from  
                    USER  u  
                order by  
                    u.id) row_   
            where  
                rownum <= ?  
            )   
        where  
            rownum_ > ?  
     步骤:
    user表中的记录是128万多条,这个是没有查询条件时的查询,也就是用户刚刚进入模块时的查询,发现查询时间是2566ms~2152ms之间,单独执行每条语句,发现第一条的执行时间在2000ms以上,在PL/SQL中执行的结果也证实了我的判断。所以要对select count语句进行优化。
         在网上找了很多优化方案,大多不尽人意,(分表的方式听上去不错,不过由于单表是历史原因,这里就不作考虑)。最后找到一个比较令人满意的答。就是在语句中加入 或者 来提高查询效果。
        听说这个就是强制使用索引统计结果?如果有哪位大虾能把原理详细告诉我,请来多多指点!
    Java代码  收藏代码
    SELECT     count(*)  FROM USER t   
    或者  
    SELECT   count(*) FROM USER  t  
     使用后,单条统计总数的查询在800ms左右,分页查询结果基本在900ms~950ms之间,基本在一秒之内,达到了当初设计需求。
        当然,这个是没有加查询条件的,当把查询条件加入后,不管前面加不加强制索引,结果时间都在2000ms之间,所以,如果要进行有条件的查询,就要在where条件中进行优化。特别注意条件字段查询前后顺序。
    具体优化请参考
    浅析Oracle语句优化规则
    http://blog.csdn.net/xiaole0313/article/details/46999741