0
我得到了一些討厭的sql性能問題。我需要執行statment,如:針對大型數據集的SQL優化
SELECT *
FROM (SELECT /*+ FIRST_ROWS(26) */
a.*, ROWNUM rnum
FROM (SELECT *
FROM t1
WHERE t1_col1 = 'val1'
AND g_dom in ('1', '2', '3')
AND g_context IN ('3', '4', '5', '6')
AND i_col = 1
AND f_col in ('1', '2', '3', '4')
AND e_g IN (SELECT e_g
FROM t2
WHERE t2_col1 = 'val1'
AND g_context IN ('3', '4', '5', '6')
AND val like 'some val%')
ORDER BY order_id DESC) a)
WHERE rnum > 0;
基本上,我們得到了表t1
(我們的數據表),並t2
(我們的支持值)。我們在t1
和t2
得到了1kk記錄。列g_context
縮小了我們的數據集,但val仍然有500k條記錄。我們需要order_id排序的25行。
有沒有辦法告訴內聲明
SELECT e_g FROM t2 WHERE t2_col1='val1' AND g_context IN('3','4','5','6') AND val like 'some val%
只得到25記載,比賽進行外部語句標準是什麼?
請爲查詢顯示「解釋計劃」。指定您認爲最具選擇性的條件是什麼樣的條件。什麼條件rnum> 0?總是對的 – Mike
ORDER_ID上是否有索引? – sers
什麼是'where rnum> 0'謂詞在做什麼?如果你只想要25行,我想你會想'rnum <= 25',這應該允許優化器在查詢計劃中使用一個停止鍵。這聽起來像你想要的,但沒有查詢計劃,很難知道。如果沒有可以掃描的索引來提供前25行,那將會是一個問題。 –