Переписать Oracle SQL в MYsql

0

это мой код Oracle

SELECT CZAS_W CZAS , SYSTEM_W SYSTEM,  'ALL', sum(NVL(STAN, 0)) STAN FROM (
  select '2018-02-06 '||A.CZAS CZAS_W, A.SYSTEM SYSTEM_W, A.PRACOWNIK PRACOWNIK_W, A.STATUS, L.PRACOWNIK, L.CZAS, L.SYSTEM, L.STAN
  from GC_ALWAYS A , O2MT_GC2_LICENCJI_LOG L
  WHERE A.SYSTEM = L.SYSTEM (+)
    AND A.PRACOWNIK = L.PRACOWNIK (+)
    AND TO_DATE('2018-02-06 '||A.CZAS, 'RRRR-MM-DD HH24:MI') = L.CZAS  (+)
    AND A.SYSTEM = 'HURT06OTO' )
   group by CZAS_W  , SYSTEM_W  

В Oracle он работает в 226 мс. (Не используется индекс)

Я переписал его в MySQL:

SELECT s1.CZAS_W CZAS , s1.SYSTEM_W SYSTEM,  'ALL', sum(ifnull(s1.STAN, 0)) STAN FROM (
select STR_TO_DATE(concat("2018-02-06 ",A.CZAS), '%Y-%m-%d %H:%i') CZAS_W, A.SYSTEM SYSTEM_W, A.PRACOWNIK PRACOWNIK_W, A.STATUS, L.PRACOWNIK, L.CZAS, L.SYSTEM, L.STAN
    from GC_ALWAYS A
     LEFT OUTER JOIN O2MT_GC2_LICENCJI_LOG L ON A.SYSTEM = L.SYSTEM
        and A.PRACOWNIK = L.PRACOWNIK  
        and STR_TO_DATE(concat("2018-02-06 ",A.CZAS), '%Y-%m-%d %H:%i') = L.CZAS    
  WHERE A.SYSTEM = 'HURT06OTO'    
    ) s1   group by s1.CZAS_W  , s1.SYSTEM_W

Но время работы составляет более 1000 секунд!

БД находятся на другом сервере. Но я думаю, что что-то не так в моей MySQL-версии кода.

В oracle я использую (+) синтаксис для внешнего соединения. Я что-то испортил в соединениях mysql?

И да, две таблицы соединены тремя столбцами по левому внешнему соединению.

  • 1
    Если вы не используете индексы, вы не можете ожидать достойной производительности. Как правило, производительность google официальная документация по оптимизации и переоценке индексов. Также гугл саркастичность. Реализация RDMBS - это оптимизация. PS Оракул сам по себе устарел (+) . Также, пожалуйста, смотрите минимальный воспроизводимый пример .
  • 0
    Что показывает план объяснения? Начните там, чтобы помочь отладить проблемы с производительностью.
Теги:

1 ответ

0

Индексы имеют решающее значение, но с одной стороны, часть, на которую нужно сосредоточиться, такова:

AND STR_TO_DATE(CONCAT("2018-02-06 ",a.czas), '%y-%m-%d %h:%i') = l.czas

Если вы можете переписать это без функций, производительность будет значительно повышаться.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню