直到今天,我的查询工作正常。
我认为索引存在一些问题。
注意:在列类型(在表1中)中有索引,而table_1
中的类型不是唯一的以下是查询相似的内容:
--works fine(finish in 5 seconds)
select *
from table_1 a,table_2 b
where a.id=b.id
and a.date < date'2014-6-31'
and a.type=2
当我增加日期范围(包括更多1个月,大约1000个记录以上)时,它没有完成,所以我必须停止它。
--never ending
select *
from table_1 a,table_2 b
where a.id=b.id
and a.date < date'2014-7-31'
and a.type=2
但是当我省略具有索引的列时,没关系:
--works fine
select *
from table_1 a,table_2 b
where a.id=b.id
and a.date < date'2014-7-31'
我会对任何提示感激不尽。
答案 0 :(得分:0)
尝试以这种方式禁用索引:
ALTER INDEX idxname DISABLE;
您还可以重建索引
ALTER INDEX idxname REBUILD;
或收集表格的统计数据
EXEC DBMS_STATS.GATHER_TABLE_STATS ('yourschema', 'table');
但要小心可能需要很长时间!
答案 1 :(得分:0)
您可以使用查询计划查看发生了什么。
在runstats或禁用索引之前,首先重新编码查询计划,在runstats之后比较查询计划或禁用索引。然后,您可以自己弄清楚数据库中发生了什么。
你应该知道,并非所有索引都有帮助。
有些时候没有索引,dbms会选择全表扫描和散列连接来提高性能。
但是对于某些索引,dbms可能会使用下一个循环连接,这种类型的连接可能会降低成本,但可能会执行串行。