加入日历表

时间:2019-03-21 13:41:20

标签: sql sql-server database performance

我创建了一个日历表(带有索引),该表具有日期,星期几,会计年度,日期名称等。我的日历表的范围介于2005年-2071年之间​​。我查询日历表。

我想使用日历表上的日期列来过滤2个不同表上的2个不同日期列。

我遇到的问题是,当使用日历表中的日期列(例如2010-2019)搜索较大的日期范围时,要花很长时间才能返回结果。而如果我在每个表上查询相同的日期范围,则结果以秒为单位返回。这是我正在使用的查询:

Select 
      a.Col1, 
      a.Col2, 
      a.Col3, 
      a.Date1, 
      b.Date1 
   From 
      TableA as A
         FULL JOIN TableB as B 
            on A.Col1 = B.Col1
            INNER JOIN TableCal as C 
               on A.Date1 = C.Date1 
               or B.Date1 = C.Date1
   WHERE 
      C.date1 between '2010' and '2019'

如果有更好的方式编写此内容,或者如果我以错误的方式进行操作,那么我欢迎所有建议!谢谢!

1 个答案:

答案 0 :(得分:0)

形式上,答案是使用等分连接,如下所示:

Select a.Col1, a.Col2, a.Col3
From (a join
      cal ca 
      on a.col2 = ca.col2
     ) full join
     (b join
      cal cb
      on b.col2 = cb.col2
     ) 
     on a.col1 = b.col1
where ca.date between '2010' and '2019' or
      cb.date between '2010' and '2019' ;