2011-09-14 90 views
0

我有一個查詢連接了很多字段。出於某種奇怪的原因,一個表的索引根本沒有被使用(我清楚地使用了索引鍵),而是進行了全表掃描。我想強制索引。我們曾經在sybase中做過優化器提示。在oracle中是否有類似的提示? 例如,在Sybase連接表A,B,C和使用表myindex,我會做:在oracle中強制索引

SELECT a.* 
FROM  a(INDEX myindex), 
     b, 
     c 
WHERE a.field1 = b.field1 
AND  b.field1 = c.field1 

的問題是我怎麼在oracle中做到這一點。 謝謝 Saro

+1

http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements006.htm#SQLRF50405 – NullUserException

+0

你可以發佈查詢計劃? –

+4

嘗試並取代查詢優化器並不是一個好主意。一個簡短的解釋:http://stackoverflow.com/questions/7358137/oracle-full-text-search-with-condition/7379753#7379753 – NullUserException

回答

4

是的,Oracle中有這樣的提示。它看起來是這樣的:

select /*+ index(a my_index) */ from a 
+0

您需要tablespec(請參閱[docs](http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/sql_elements006.htm#SQLRF50405));如果您想要建議Oracle使用索引但不想指定哪一個,索引名稱是可選的。所以它應該是'INDEX(一個my_index)'。如果該表在查詢中有別名,則必須使用該別名作爲tablespec。 –

+0

謝謝。所以,你說我應該做這樣的事情: SELECT/* +指數(一my_index)*/A * FROM A(INDEX myindex), \t \t B, \t \tÇ WHERE a.field1 = B。 .field1 AND b.field1 = c.field1 –

+1

@Saro - no:'SELECT/* + index(a my_index)*/a。* FROM a,b,c WHERE a.field1 = b.field1 AND b.field1 = c.field1'。 (最好用ANSI加入,但這是另一個主題......) –