Запрос занимает слишком много времени для выполнения - PullRequest
0 голосов
/ 11 апреля 2019

Я использую Oracle 10g.Следующий запрос занимает слишком много времени:

  SELECT invno, invdate, ccode
    FROM acct
   WHERE     invno IS NOT NULL
         AND invdate > '01-Feb-2018'
         AND invno LIKE '%' || :ppassingmn.dept || '%'
         AND invno NOT IN (SELECT DISTINCT (vdescript)
                             FROM genldgr
                            WHERE     vchrno LIKE 'IV%'
                                  AND trandate > '01-Feb-2018'
                                  AND vdescript LIKE
                                         '%' || :ppassingmn.dept || '%')
ORDER BY SUBSTR (invno, 12, 15);

Пожалуйста, оптимизируйте его.

1 Ответ

1 голос
/ 11 апреля 2019

Вы не предоставили много информации.Сам запрос в значительной степени бесполезен (как будто вы вызвали механика и сказали: «Моя голубая машина медленная. Почему?»).

В любом случае, несколько подсказок;может быть, они помогут.

  • '01-Feb-2018' это строка.Если INVDATE является столбцом DATE тип данных , вы заставляете Oracle выполнять неявное преобразование между VARCHAR2 и DATE.Вместо этого используйте литерал даты, например and invdate > date '2018-02-01'.То же самое касается TRANDATE.
  • LIKE медленно.Вы используете это дважды.Посмотрите, сможете ли вы переписать его на invno = :passingmn.dept.Кстати, что такое :passingmn.dept?Выглядит как переменная, но - что эта точка делает здесь?То же самое относится к VDESCRIPT.
  • DISTINCT требует, чтобы вы выбрали все строки, а затем удалили дубликаты.Кажется, вас это не волнует, поэтому - удалите DISTINCT.
  • Так как INVNO должен выглядеть как какое-то значение параметра, тогда это не NULL так что вы, вероятно, можете удалить условие invno is not null.
  • ORDER BY также влияет на производительность.Кроме того, он выбирает подстроку .Тебе это нужно?Если нет, удалите его
  • , проиндексированы ли столбцы, включенные в предложение WHERE?Если нет, сделайте это

Наконец, объяснение плана поможет.Без этого люди частично слепы.

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