组合join和where子句时性能不佳

时间:2018-06-04 16:07:26

标签: sql oracle oracle12c

我在加入2个表并在where子句中使用日期时遇到问题 查询#1需要很长时间才能运行
查询#2运行良好(无连接)
查询#3运行正常(没有where子句)

代码

Query 1 
    select    t1.id 
    from      t1
    inner     join t2
    on        t1.id = t2.inst_id
    where     t1.change_date >= to_date('04-06-2018', 'DD-MM-YYYY')
    ; -- does not work

Query 2
    select    t1.id 
    from      t1
    --inner     join t2
    --on        t1.id = t2.inst_id
    where     t1.change_date >= to_date('04-06-2018', 'DD-MM-YYYY')
    ; -- work in < 1s


Query 3 
    select    t1.id 
    from      t1
    inner     join t2
    on        t1.id = t2.inst_id
    --where     t1.change_date >= to_date('04-06-2018', 'DD-MM-YYYY')
    ; -- works in < 1s

你知道为什么join和where子句与日期的组合有问题吗?

1 个答案:

答案 0 :(得分:-1)

如果没有你的表格结构/索引/统计数据,我只能建议检查:

Console.ReadKey()

修改

更正确的方法是添加扩展统计信息:

WITH cte AS (
  SELECT /*+materialize*/ t1.id  
  FROM t1
  WHERE t1.change_date >= to_date('04-06-2018', 'DD-MM-YYYY')
)
SELECT *
FROM cte c
JOIN t2
  ON c.id = t2.inst_id;