IBM DB2-查询优化

时间:2018-08-03 11:54:00

标签: database optimization db2 db2-zos

问题

我有一张桌子,我需要使用以下规则进行选择

  1. AUFT_LOESCH_KZ 不能为空
  2. AUFT_AUFT_ART 必须为E
  3. AUFT_FZG_ART 可以为0、1、2,E,F或G
  4. 如果 AUFT_PAT(日期)年与当年相同,那么我想选择除当前当年之外的所有前一个月

示例

如果 AUFT_PAT 年是2018年,而当前年份是2018年,那么我想根据 MONTH(AUFT_PAT)选择之前的所有月份,直到2018年1月

以下查询有效,但是在大型机上占用的CPU时间过多,例如50分钟,甚至还没有完成

每个 DBIN0XX 都有大约20.000个寄存器。

我对DB2场景还很陌生,所以我对如何优化它或如何分离查询没有一个很好的认识,任何帮助将不胜感激,因为它将直接影响我的开发。

DATEI01 SEL DBHOLDER  AUFT_LOESCH_KZ IS NULL                                                         
                      AND AUFT_AUFT_ART IN ('E')                                                     
                      AND AUFT_FZG_ART IN ('0', '1', '2', 'E', 'F', 'G')                             
                      AND                                                                            
                        (                                                                            
                              AUFT_PAT <                                                             
                              (                                                                      
                               SELECT                                                                
                                 MIN(KALW_DATUM_JUL)  PMON                                           
                               FROM                                                                  
                                 D$DW7305.W73RKALW                                                   
                               WHERE                                                                 
                                 KALW_PMON = '+00'                                                   

                              )                                                                      
                      AND  SUBSTR(AUFT_PAT, 1, 4) YEAR = YEAR(CURRENT DATE) CURRENTYEAR              
                      AND  MONTH(CURRENT DATE) CURRENTMONTH > 1                                      
                        )                                                                            
                      OR                                                                             
                           (                                                                         
                           YEAR = CURRENTYEAR - 1                                                    
                      AND  CURRENTMONTH = 1                                                          
                           )                                                      
OUT DBIN010
OUT DBIN020
OUT DBIN030
OUT DBIN040
OUT DBIN050
OUT DBIN060
OUT ZWAA071
OUT ZWAA090
OUT ZWAA150
OUT ZWAA200

0 个答案:

没有答案