編輯:看來,這種解決方案需要更多的測試,因爲 oracle reference for optimizer hints說: 甲骨文忽略提示如果註釋包含3他們不遵循DELETE,SELECT或UPDATE關鍵字。(感謝@swstephe注意到這一點)。在這個解決方案中,第一個括號是額外的,因爲這可能優化器根本不會處理提示。
如果需要的話,你可以先檢查一下它的別名創建SQL時,Django使用:
qs = Table1.objects.all()
檢查查詢有:
>>> print qs.query # or qs.query.sql_with_params()
SELECT "TABLE1"."ID",... FROM "TABLE1"
,然後你可以通過使用django queryset extra method增加「額外的」虛擬列包含提示的列定義:
>>> qs = qs.extra(select={"dummy1" : '/*+ ORDERED USE_NL("TABLE1") */ 1 '}).all()
如果我們現在檢查查詢的外觀 - 它看起來像這樣:
>>> print qs.query
SELECT (/*+ ORDERED USE_NL("TABLE1") */ 1) AS "DUMMY1", "TABLE1"."ID",
... FROM "TABLE1"
其他有用的參考:
這似乎並沒有工作。 Oracle優化器提示必須在「SELECT」關鍵字後立即出現。我檢查了一下我需要做的這個查詢,並且如果在一個值之後或者在這些括號內,提示被忽略。 – swstephe 2015-02-05 17:36:09
感謝您檢查並注意到這一點。我需要做更多的測試。 – 2015-02-06 22:52:19