analyze table scott.tabel compute statistics ;
然后再执行一次

解决方案 »

  1.   

    TABLE ACCESS FULL了检查你的索引等是否还再起作用
      

  2.   

    --------------------------------------------------
    xiaoxiao1984(笨笨猫儿)
         analyze table scott.tabel compute statistics ;
         然后再执行一次
    --------------------------------------------------
    还是没有用,还请问一下,analyze table 是什么作用?
    还是把详细情况说一下:
    在下初学oracle,
    此表有50 多个字段其中有一个clob 类型字段,表中有6个字段建有全文索引,
    排序要按照lasttime 排序,今天刚开机时,我用 select * from tablename order by sid; (sid)是主键,执行非常快1秒左右,我用 select * from tablename order by lasttime ; 就很慢; 然后我用企业管理器 分析了表 table 之后, 我用select * from tablename order by sid; 就很慢了,这是为什么?敬请各路英豪,路过不要错过,不吝赐教,在下宰牛烹羊,不甚感激!!!!!
      

  3.   

    lasttime 索引没用上看看 lasttime 索引语法
    是不是有问题
      

  4.   

    ---------------------
    baojianjun(包子) 
         TABLE ACCESS FULL了检查你的索引等是否还再起作用
    ----------------------------请问包大人,如何检查你的索引等是否还再起作用?
      

  5.   

    要不用hints
    select /*+INDEX_COMBINE(yourtable yourindex)*/ * from yourtable
      

  6.   

    SQL:
    select /*+ INDEX_COMBINE(xdhtnews index_lasttime)*/ * from xdhtnews order by lasttime;
    解释计划:
    --------------------------------------------------------
    SELECT STATEMENT, GOAL = CHOOSE 144779 180100 324540200
     SORT ORDER BY 144779 180100 324540200
      TABLE ACCESS BY INDEX ROWID SCOTT XDHTNEWS 144779 180100 324540200
       BITMAP CONVERSION TO ROWIDS
        BITMAP CONVERSION FROM ROWIDS
         SORT ORDER BY
          INDEX FULL SCAN SCOTT INDEX_LASTTIME 1801
    -----------------------------------------------------------查询还需要23秒,表里有18万数据
      

  7.   

    返回记录集当然需要时间的,加上 lasttime范围条件,不要访问全集
    索引的效果才能体现
    还有,唯一索引应该比非唯一索引快些
      

  8.   

    analyze table scott.tabel compute statistics ; 重新收集表的统计信息
    考虑是不是重建一次索引;
    select * from user_indexes where table_name = upper('table_name');
    先查询出该表上创建了哪些索引,然后
    alter index index_name rebuild compute statistics;
    逐个重建索引,然后再执行查询看看
      

  9.   

    -------------------------------
    yaozw_mountain(山林)   返回记录集当然需要时间的,   加上 lasttime范围条件,不要访问全集
       索引的效果才能体现   还有,唯一索引应该比非唯一索引快些
    ----------------------------
    我用pl/sql ,现在我需要全部的数据按照lasttime 排序,而非部分数据,
    假如我需要查询 pubflag = 1 的记录, 也几乎是全部数据。
      

  10.   

    你去后台查看下你的这个表上有几个索引 贴出来看看如果pubflag有索引和没有索引的查询时间差别很大的
      

  11.   

    道声谢先!多谢各位
    -------------------------
    xiaoxiao1984(笨笨猫儿) 
    ---------------------------
    select * from user_indexes where table_name = upper('xdhtnews');INDEX_NAME                     INDEX_TYPE                  TABLE_OWNER 
    ------------------------------ --------------------------- ------------------------
    INDEX_LASTTIME                 NORMAL                      SCOTT 
    SYS_C002831                    NORMAL                      SCOTT
    SYS_IL0000033427C00027$$       LOB                         SCOTT
    SYS_IL0000033427C00028$$       LOB                         SCOTT
    SYS_IL0000033427C00029$$       LOB                         SCOTT
    SYS_IL0000033427C00036$$       LOB                         SCOTT前面两个索引重建ok了,
    下面4个索引是系统建的,表中有一个 Clob 类型字段,
    SQL> alter index SYS_IL0000033427C00027$$ rebuild compute statistics;alter index SYS_IL0000033427C00027$$ rebuild compute statisticsORA-02327: 无法以数据类型LOB的表达式创建索引
    ---------------------
    SQL>select /*+ INDEX_COMBINE(xdhtnews index_lasttime)*/ * from xdhtnews order by lasttime;
    还要29秒之多,按照日期排序就这么慢么
      

  12.   

    --------------------
     baojianjun(包子) 
    ---------------------SQL>select * from xdhtnews where pubflag = 1;
    这句查询不到1秒就有结果了
    问题是我一加上排序,就很慢了
    SQL> select * from xdhtnews where pubflag = 1 order by lasttime;
    就要29妙了大家有遇到按照时间排序的问题么?
    现在即使我 order by sid(pk) 也要30秒左右,
    配置文件 init.ora 的sort_area_size 大小为50M,建索引用企业管理器建的,
    会不会是我的oracle 有问题,
      

  13.   

    要排序走fts是很正常的.因为你必须要走全表扫.
      

  14.   

    select * from (select * from xdhtnews where pubflag = 1) order by lasttime
      

  15.   

    谢谢大家的支持,我发现当我要排序的字段lasttime 出现在where 条件中时,速度非常快,1秒左右,大家有什么看法?是否可以设置oracle 在什么情况下使用 索引?
    SQL: select * from xdhtnews where lasttime> to_date('1900-01-01 01:00:00','yyyy-mm-dd hh24:mi:ss') order by lasttime;
    -----------------------
    SELECT STATEMENT, GOAL = ALL_ROWS 826 180100 135075000
     TABLE ACCESS BY INDEX ROWID SCOTT XDHTNEWS 826 180100 135075000
      INDEX RANGE SCAN              SCOTT INDEX_LASTTIME 26 180100
      

  16.   

    排序时间的问题暂时就这样了...大家对全文索引的语法 ...讨论一下 ... 周末结贴 ..关注有分如果我的查询语句条件非常复杂,查询时间就很长,请大家关注,踊跃发言
    SQL : select ... from xdhtnews where contains (content , '条件A and 条件B (条件C or 条件D ).....')>0;