哪些更优化?

时间:2016-06-10 01:54:44

标签: oracle plsql sqoop

我正在尝试使用sqoop从oracle 11g数据库中提取数据。 我没有PL / SQL背景。我必须根据某个recordType和starttime过滤一个大表上的记录,然后在另一个表上为相同的starttime进行连接(表2中的所有记录都与从table1过滤的记录类型相同)。 有人可以帮助我并解释哪些查询会消耗更少的流程以及为什么?

此外,连接还可以根据开始时间过滤Table2上的记录(基于连接条件或仍将解析整个表)或者我需要为其添加另一个过滤条件吗?

QUERY1:

Select t2.field1, t2.field2 ..... t1.some_field 
FROM table1 t1 
INNER JOIN table2 t2 ON 
(
t1.field3='certain value' AND 
t1.END_TIME >= TO_DATE('20160428 16','YYYYMMDD HH24') AND t1.END_TIME < TO_DATE('20160428 17','YYYYMMDD HH24') AND t1.START_TIME = t2.START_TIME AND 
t1.field2=t2.field7) 
WHERE $CONDITIONS 

QUERY2:

Select t2.field1, t2.field2 ..... t1.some_field 
FROM table1 t1 
INNER JOIN table2 t2 ON 
(t1.START_TIME = t2.START_TIME AND 
t1.field2 = t2.field7) 
WHERE 
t1.field3 = 'certain value' AND t1.END_TIME >= TO_DATE('20160428 16','YYYYMMDD HH24') AND t1.END_TIME < TO_DATE('20160428 17','YYYYMMDD HH24') AND 
$CONDITIONS

1 个答案:

答案 0 :(得分:4)

  

有人可以帮助我并解释一下这个查询   消耗更少的流程以及为什么?

为每个查询生成解释计划,并进行比较 - 您将获得每个查询的成本。

https://docs.oracle.com/cd/B10501_01/server.920/a96533/ex_plan.htm#16889

只需运行两个命令:

  1. EXPLAIN PLAN FOR your_query
  2. SELECT * FROM table( DBMS_XPLAN.DISPLAY )
  3. 您可以在问题中附加解释计划,可以进一步分析它们以查找问题并建议如何优化这些查询。