我有一个查询,在SQL中执行时表现非常好。
这是一个表和查询之间的连接。这两个表都有接近400万条记录。在doc表上有位图索引,我正在尝试提供提示。从toad中查看,解释计划确实显示它们对连接有很大帮助。
我已经提供了其他2个提示,以查看它们是否有所帮助。一个是用于直接路径APPEND,另一个是利用现有的pda BTree索引。
当在SQL中运行此查询以替换变量时,结果是即时的,但同样的查询在过程内运行需要8秒或更长时间。
除了DBA尚未产生的过程计划外,您认为还有哪些重要的问题吗?先感谢您。
INSERT /*+ APPEND */
INTO tmp_search_gross_docs (document_id,
last_name,
first_name,
person_doc_association_id,
association_date)
SELECT /*+INDEX(pda IDX_DOC_PDOC_DOCID ) USE_NL(pda doc) */
pda.document_id,
last_name,
first_name,
person_doc_association_id,
association_date
FROM pda,
(SELECT /*+INDEX_COMBINE(attr IDX_BMP_SEARCH_FN,IDX_BMP_SEARCH_LN)*/
document_id, last_name, first_name
FROM doc attr
WHERE first_name LIKE l_first_name OR last_name LIKE l_last_name) doc
WHERE pda.document_id = doc.document_id;
) doc
WHERE pda.document_id = doc.document_id;
解释计划(来自绑定变量的Toad)
插入语句ALL_ROWSCost:1,086,010字节:15,309,420基数:364,510
11个负载,如选择TMP_SEARCH_GROSS_DOCS
10个表访问按索引ROWID表PDA成本:3字节:20基数:1
9个嵌套循环成本:1,086,010字节:15,309,420基数:364,510
7个表访问按索引ROWID表ATTR成本:23,893字节:8,019,220基数:364,510
6个位图转换为ROWIDS
5个位图或
2个位图合并
1个位图索引范围扫描索引(位图)IDX_BMP_SEARCH_FN
4个位图合并
3个位图索引范围扫描索引(位图)IDX_BMP_SEARCH_LN
8个索引范围扫描索引IDX_PDA_EXP_DOC成本:2基数:1
基数364,510似乎不正确,因为该表包含3738562行,对于WHERE子句中的列的替代值,计数仅为8892。
然而,这个方案至少告诉我正确的索引被使用,并且从Toad编辑器运行非常快。
PL/SQL实际计划仍然不可用。
不确定这是否添加了一些有价值的信息。但还是想编辑一下。谢谢。