[oracle]避免 unenecessary 表扫描

标签: sql Oracle
发布时间: 2017/4/15 18:52:21
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.
Col 1,
col 2,
.....
.....
from 
table1,
table2
........
........
where
join conditions1
join conditions1
................
.................
and
table1.day_key >= (select key from date_dim where value='01-JAN-2011')
and table1.day_key <= (select key from date_dim where value='31-DEC-2011')
and 
table2.day_key >= (select key from date_dim where value='01-JAN-2011')
and table2.day_key <= (select key from date_dim where value='31-DEC-2011')

在这里我可以看到 date_dim 表做扫描在哪里的四个条件下,如何避免它。在主要 from 子句中不选择 date_dim 表。环境来测试这个不幸的是别了数据库是 oracle 10g

解决方法 1:

正如我说也看不出有必要时扫描那表两倍的性能问题。

将纯重写的查询︰

select 
  Col 1,
  col 2,
from 
  table1,
  table2,
  date_dim date_dim_start,
  date_dim date_dim_end
where
  join conditions1
  join conditions1 and
  table1.day_key >=  date_dim_start.key and
  table1.day_key <= date_dim_end.key and
  table2.day_key >= date_dim_start.key and
  table2.day_key <= date_dim_end.key and
  date_dim_start.value = '01-JAN-2011' and
  date_dim_end.value='31-DEC-2011';

但您应该对其进行测试,为了不遭受性能击中。

官方微信
官方QQ群
31647020