假設我有以下查詢:如何在查詢提示中爲單個表的不同連接選擇不同的提示?
select * from A, B, C, D
where A.x = B.x
and B.y = C.y
and A.z = D.z
我有A.x和B.x和B.y和C.y和D.z
指標上有A.Z.沒有索引
如何提示此查詢在A.x上使用INDEX提示,但在A.z上使用USE_HASH提示?看起來好像只有表名,而不是特定的聯接,所以當使用一個包含多個聯接的表時,我只能爲它們指定一個策略。
另外,假設我在上面的查詢中使用了LEADING或ORDERED提示。這兩個提示都只有一個表名,所以如何確保A.x = B.x join在A.z = D.z之前發生?我意識到在這種情況下,我可以先列出D,但想象D隨後加入到E中,並且D-E加入是我在整個查詢中想要的最後一個。
第三個配置 - 假設我希望A.x join成爲整個查詢的第一個,並且我希望A.z join成爲最後一個。我如何使用提示從A發起單個連接,然後是B-C連接,最後是A-D連接?
否 - 'ORDERED'不包含表名。它告訴優化器使用FROM子句中的表的順序。另外,在Oracle 10g +中,LEADING提示接受任意數量的表 - 例如, '/ * + LEADING(A B C D)* /' – 2010-03-29 03:44:49