在oracle 8.1.7中建立全文索引,数据量不到10万条,而索引的数据量已大于500万条,以致于查询速度很慢,一般要10几秒,查询SQL如下:select /* + FIRST_ROWS */ * from(
SELECT IID
FROM IP_Info
where contains(ctcontent,'伊拉克',1)>0
ORDER BY IID desc
)
where rownum<20其中iid是主键,由sequence产生。相当于按记录插入时间倒序排序。测试发现:主要是order by后花的时间,如果去掉order by ,则速度将提高数十倍。且经SQL 分析发现,在order by 时,没有使用到IID上的索引。也就是说,没有用到[stopkey]的优化措施,实际上是取出所有的记录后再排序的,并非取前20条记录。此表中的数据极有规律,始终需要后插入的数据最先显示,是否有可能将此SQL优化?
SELECT IID
FROM IP_Info
where contains(ctcontent,'伊拉克',1)>0
ORDER BY IID desc
)
where rownum<20其中iid是主键,由sequence产生。相当于按记录插入时间倒序排序。测试发现:主要是order by后花的时间,如果去掉order by ,则速度将提高数十倍。且经SQL 分析发现,在order by 时,没有使用到IID上的索引。也就是说,没有用到[stopkey]的优化措施,实际上是取出所有的记录后再排序的,并非取前20条记录。此表中的数据极有规律,始终需要后插入的数据最先显示,是否有可能将此SQL优化?
解决方案 »
- oracle sql 语句 优化问题
- 求ado.net连接oracle数据库
- 此sql咋写?
- oracle数据库与access的几个问题?
- 请问如何判断哪个session导致锁?
- 怎样把.gz文件复制到磁带机
- [求助]检索成对记录,取出多余的数据(在线等,急!)
- 无法打开文件:"c:\orant\tools\dbtab60\d2kcnct.sql",developer问题,谢谢!!
- 请教一个触发器如何写
- Oracle表空间如何优化
- 请问我的系统坏了,但我的oracle数据库没有倒出过,请问我从装系统和数据库后还能恢复我以前的数据库吗?
- 我准备把数据库改为归档模式,在shutdown时老是出现“ORA-00106: 无法在连接到调度程序时启动/关闭数据库”,应该怎样处理??
http://www.itpub.net/showthread.php?s=&threadid=25259&highlight=%B5%B9%D0%F2%CB%F7%D2%FD
Thanks.
alter index index_name rebuild online;
观察性能是否有提高第二种方法:建立函数索引
create index index_func_name on (ctcontent,'伊拉克',1);
不是索引的问题,ctcontent是clob字段,在此字段上建有全文索引。慢的主要原因是是含有‘伊拉克’的数据有一万多条,再排序比较慢,如果有可能在 ctcontent和IID上建联合索引,则oracle有可能用到[stopkey]的优化措施,而全文索引和其他字段的索引似乎是不能联在一起的。实际上,按where条件搜寻出来的记录已经是排好序的,我只需要倒着按IID取就行了,为什么需要再次order by呢?另外:
create index index_func_name on (ctcontent,'伊拉克',1);
我不明白是什么意思,如何建?‘伊拉克’只是一个搜索关键字。