在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语句
- 使用oracle中的哪个目录下的菜单操作oracle?(初学者)
- 关于64位机器下调用oci
- Oracle 见表空间时的问题
- oracle查询问题
- 请教一条SQL写法,困扰已久。
- 在java中用exp和imp导出导入,怎么知道已经导出或导入完成
- 请 duanzilin(寻) 进来看一下谢拉!
- 字符型的字段与日期如何高效的进行比较
- 请教:什么样的视图不能被修改?
- 请问我的系统坏了,但我的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);
我不明白是什么意思,如何建?‘伊拉克’只是一个搜索关键字。