要不用hints select /*+INDEX_COMBINE(yourtable yourindex)*/ * from yourtable
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万数据
道声谢先!多谢各位 ------------------------- 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秒之多,按照日期排序就这么慢么
-------------------- 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 有问题,
要排序走fts是很正常的.因为你必须要走全表扫.
select * from (select * from xdhtnews where pubflag = 1) order by lasttime
谢谢大家的支持,我发现当我要排序的字段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
排序时间的问题暂时就这样了...大家对全文索引的语法 ...讨论一下 ... 周末结贴 ..关注有分如果我的查询语句条件非常复杂,查询时间就很长,请大家关注,踊跃发言 SQL : select ... from xdhtnews where contains (content , '条件A and 条件B (条件C or 条件D ).....')>0;
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; 就很慢了,这是为什么?敬请各路英豪,路过不要错过,不吝赐教,在下宰牛烹羊,不甚感激!!!!!
是不是有问题
baojianjun(包子)
TABLE ACCESS FULL了检查你的索引等是否还再起作用
----------------------------请问包大人,如何检查你的索引等是否还再起作用?
select /*+INDEX_COMBINE(yourtable yourindex)*/ * from yourtable
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万数据
索引的效果才能体现
还有,唯一索引应该比非唯一索引快些
考虑是不是重建一次索引;
select * from user_indexes where table_name = upper('table_name');
先查询出该表上创建了哪些索引,然后
alter index index_name rebuild compute statistics;
逐个重建索引,然后再执行查询看看
yaozw_mountain(山林) 返回记录集当然需要时间的, 加上 lasttime范围条件,不要访问全集
索引的效果才能体现 还有,唯一索引应该比非唯一索引快些
----------------------------
我用pl/sql ,现在我需要全部的数据按照lasttime 排序,而非部分数据,
假如我需要查询 pubflag = 1 的记录, 也几乎是全部数据。
-------------------------
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秒之多,按照日期排序就这么慢么
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 有问题,
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
SQL : select ... from xdhtnews where contains (content , '条件A and 条件B (条件C or 条件D ).....')>0;