我的sql语句如下:
select jqno,jqchara,jqtime,bjtel,afaddr from (select jqno,jqchara,jqtime,bjtel,afaddr from case_lq where jqchara='牙刷' or jqchara='汽车' order by jqno desc) where rownum<11
上述sql语句的目的是:想查询视图case_lq并按照jqno排序,把最新的10条数据检索出来。
其中case_lq有200多万数据。上述sql语句执行要107秒,请问如何修改我的sql语句才能提高速度。

解决方案 »

  1.   

    select jqno,jqchara,jqtime,bjtel,afaddr from (select jqno,jqchara,jqtime,bjtel,afaddr from case_lq where jqchara='牙刷' or jqchara='汽车' order by jqno desc) where rownum<11
    改成select jqno,jqchara,jqtime,bjtel,afaddr from case_lq where jqchara='牙刷' or jqchara='汽车' and rownum<11 order by jqno desc  不行吗 干吗 需要过滤一下 
    另外 建议 给jqchara  建一个 注视表 char型得 再数据库中 搜索 太慢 
      

  2.   

    请问什么是“注视表”还有我还是看不懂下面的话:
    “另外 建议 给jqchara  建一个 注视表 char型得 再数据库中 搜索 太慢 ”
      

  3.   

    Select * from (select jqno,jqchara,jqtime,bjtel,afaddr,row_number()
    over (order by jqno) rn from case_lq where jqchara='牙刷' or jqchara='汽车) where rn<11
    再不行,贴执行计划
      

  4.   

    如果插入操作不太频繁,并且jqchara的取值不多且可以知道,可以试一下改case_lq 为分区表
      

  5.   

    使用物化视图。
    create materialized view MyMview
    refresh complete on demand
    start with sysdate next SYSDATE+2 //每隔两天更新一次,这里时间可以调配
    WITH PRIMARY KEY        
    as
    select jqno,jqchara,jqtime,bjtel,afaddr from case_lq where jqchara='牙刷' or jqchara='汽车' order by jqno desc建立好物化视图后,就可以直接对它进行操作。
    select * from MyMview where rownum<11  速度将大大提高。
      

  6.   

    其实这条语句,应该主要是条件是OR,没有利用到两个字段的索引,以及如果结果集巨大,排序的开销。所以个人认为如果jqno只是主键,没有什么实际的排序意义,那还是不用排序的好,并且把OR改写成其他写法