我有2个表格,有多个记录(见表A和表B有大约3 000 000份记录)。 vr2_input is a varchar content criteria into by theuser, and 我想得到最大的200“date Field”s Table 显示现场的纪录,如vr2_input 。 2个表格合并如下:
select * from(
select * from
TableA join TableB on TableA.id = TableB.id
where TableA.stringField like vr2_input || %
order by TableA.dateField desc
) where rownum < 201
问题是缓慢的,我总结说,这是因为“类似”和“按顺序排列”涉及全桌扫描。 然而,我找不到解决问题的办法。 我如何调整这种结构? 我已经制定了表A.外地和表A.日期指数。 外地,但我如何在选择说明中使用指数特征? 数据库为10g。 感谢!
最新情况:我使用建议,只选择我想要和操作解释计划的领域。 大约4名排雷人员完成询问。 IX_TableA_string 外地是表A.srv_ref外地的指数名称。 我再次提出解释性计划,但没有说明,解释性计划也取得了相同结果。
EXPLAIN PLAN FOR
select * from(
select
/*+ INDEX(TableB IX_TableA_stringField)*/
TableA.id,
TableA.stringField,
TableA.dateField,
TableA.someField2,
TableA.someField3,
TableB.someField1,
TableB.someField2,
TableB.someField3,
from TableA
join TableB on TableA.id=TableB.id
WHERE TableA.stringField like 21 || %
order by TableA.dateField desc
) where rownum < 201
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 871807846
--------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 200 | 24000 | 3293 (1)| 00:00:18 |
|* 1 | COUNT STOPKEY | | | | | |
| 2 | VIEW | | 1397 | 163K| 3293 (1)| 00:00:18 |
|* 3 | SORT ORDER BY STOPKEY | | 1397 | 90805 | 3293 (1)| 00:00:18 |
| 4 | NESTED LOOPS | | 1397 | 90805 | 3292 (1)| 00:00:18 |
| 5 | TABLE ACCESS BY INDEX ROWID| TableA | 1397 | 41910 | 492 (1)| 00:00:03 |
|* 6 | INDEX RANGE SCAN | IX_TableA_stringField | 1397 | | 6 (0)| 00:00:01 |
| 7 | TABLE ACCESS BY INDEX ROWID| TableB | 1 | 35 | 2 (0)| 00:00:01 |
|* 8 | INDEX UNIQUE SCAN | PK_TableB | 1 | | 1 (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter(ROWNUM<201)
3 - filter(ROWNUM<201)
6 - access("TableA"."stringField" LIKE 21% )
filter("TableA"."stringField" LIKE 21% )
8 - access(TableA"."id"="TableB"."id")