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行,那将会是一个问题。 –