Как я могу оптимизировать SQL-код помимо индексации? - PullRequest
0 голосов
/ 17 января 2019

Я написал SQL-код, как показано ниже. Позже добавили несколько индексов в зависимости от того, где условие, но производительность не достаточно. Есть ли общее правило оптимизации для SQL или есть предложения для ниже SQL? Как я могу улучшить свой SQL-код?

    SELECT COUNT(*) OVER() AS tot_count,
    PG.DESCR as partner, 
    THAF.APPDATA 
    FROM   transhist th, 
    trans_app thaf, 
    partnergroup pg, 
    partnergrpkey pgk 

    WHERE TH.CreateDt >= to_date('?startdate', 'yyyymmddhh24mi') 
    AND TH.CreateDt <= to_date('?enddate', 'yyyymmddhh24mi')+1/1440 


    AND TH.TRANSSET = '820' 
    AND THAF.TRANSHISTID = th.id 
    AND THAF.COLUMNID = 74 

    AND THAF.APPDATA LIKE '%|?acctNo|%' 

    AND TH.TRNSLTPARTNERKEY = PGK.DOCHISTPARTNERKEY 
    AND PG.ID = PGK.PARTNERGROUPID 

    AND pg.ID IN (?tpValues) 


    ORDER BY TH.ID;

Индексирование, как показано ниже:

CREATE INDEX TRANS_APP_ALL ON TRANS_APP(TRANSHISTID, COLUMNID, APPDATA);
CREATE INDEX TRANS_CREATEDT ON TRANSHIST(TRANSSET, CREATEDT, TRNSLTPARTNERKEY);

1 Ответ

0 голосов
/ 17 января 2019

Сначала напишите запрос, используя правильный, явный, стандартный join синтаксис:

select count(*) over () AS tot_count,
       PG.DESCR as partner, 
       THAF.APPDATA 
from transhist th join 
     partnergrpkey pgk 
     on TH.TRNSLTPARTNERKEY = PGK.DOCHISTPARTNERKEY join
     partnergroup pg
     on PG.ID = PGK.PARTNERGROUPID join
     trans_app thaf
     on THAF.TRANSHISTID = th.id
where TH.CreateDt >= to_date('?startdate', 'yyyymmddhh24mi') and
      TH.CreateDt <= to_date('?enddate', 'yyyymmddhh24mi')+1/1440 and
      TH.TRANSSET = '820' and
      THAF.COLUMNID = 74 and
      THAF.APPDATA LIKE '%|?acctNo|%' and
      pg.ID IN (?tpValues) 
order by TH.ID;

Для этого запроса я ожидаю, что помогут следующие индексы:

  • transhist(TRANSSET, CreateDt, TRNSLTPARTNERKEY, id)
  • partnergrpkey(DOCHISTPARTNERKEY, PARTNERGROUPID)
  • partnergroup(id)
  • trans_app(TRANSHISTID, COLUMNID, APPDATA)

Это похоже на ваши индексы. Возможно, вы захотите проверить план выполнения, чтобы увидеть, действительно ли используются индексы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...