Самый быстрый способ выполнить сложный запрос в большом SQL

0

У меня есть данные SQL, которые содержат две таблицы с именами buletin и pasarbubar. Я хочу получить данные, используя этот запрос:

SELECT
    b.date_time,
    b.Type,
    b.duration,
    (SELECT MAX('0') FROM rsam_bpptkg.pasarbubar e
     WHERE e.ss_time BETWEEN b.date_time AND DATE_ADD(b.date_time, INTERVAL 10 SECOND)) AS f0_max,
    (SELECT MAX('1') FROM rsam_bpptkg.pasarbubar e
     WHERE e.ss_time BETWEEN b.date_time AND DATE_ADD(b.date_time, INTERVAL 10 SECOND)) AS f1_max,
     (SELECT MAX('2') FROM rsam_bpptkg.pasarbubar e
     WHERE e.ss_time BETWEEN b.date_time AND DATE_ADD(b.date_time, INTERVAL 10 SECOND)) AS f2_max,
     (SELECT MAX('3') FROM rsam_bpptkg.pasarbubar e
     WHERE e.ss_time BETWEEN b.date_time AND DATE_ADD(b.date_time, INTERVAL 10 SECOND)) AS f3_max,
     (SELECT MAX('4') FROM rsam_bpptkg.pasarbubar e
     WHERE e.ss_time BETWEEN b.date_time AND DATE_ADD(b.date_time, INTERVAL 10 SECOND)) AS f4_max,
     (SELECT MAX('5') FROM rsam_bpptkg.pasarbubar e
     WHERE e.ss_time BETWEEN b.date_time AND DATE_ADD(b.date_time, INTERVAL 10 SECOND)) AS f5_max,
     (SELECT MAX('6') FROM rsam_bpptkg.pasarbubar e
     WHERE e.ss_time BETWEEN b.date_time AND DATE_ADD(b.date_time, INTERVAL 10 SECOND)) AS f6_max,
     (SELECT MAX('7') FROM rsam_bpptkg.pasarbubar e
     WHERE e.ss_time BETWEEN b.date_time AND DATE_ADD(b.date_time, INTERVAL 10 SECOND)) AS f7_max,
     (SELECT MAX('8') FROM rsam_bpptkg.pasarbubar e
     WHERE e.ss_time BETWEEN b.date_time AND DATE_ADD(b.date_time, INTERVAL 10 SECOND)) AS f8_max,
     (SELECT MAX('9') FROM rsam_bpptkg.pasarbubar e
     WHERE e.ss_time BETWEEN b.date_time AND DATE_ADD(b.date_time, INTERVAL 10 SECOND)) AS f9_max,
     (SELECT MAX('10') FROM rsam_bpptkg.pasarbubar e
     WHERE e.ss_time BETWEEN b.date_time AND DATE_ADD(b.date_time, INTERVAL 10 SECOND)) AS f10_max,
     (SELECT MAX('11') FROM rsam_bpptkg.pasarbubar e
     WHERE e.ss_time BETWEEN b.date_time AND DATE_ADD(b.date_time, INTERVAL 10 SECOND)) AS f11_max,
     (SELECT MAX('12') FROM rsam_bpptkg.pasarbubar e
     WHERE e.ss_time BETWEEN b.date_time AND DATE_ADD(b.date_time, INTERVAL 10 SECOND)) AS f12_max,
     (SELECT MAX('13') FROM rsam_bpptkg.pasarbubar e
     WHERE e.ss_time BETWEEN b.date_time AND DATE_ADD(b.date_time, INTERVAL 10 SECOND)) AS f13_max
FROM bul.buletin b

На этот раз для выполнения этого запроса я обычно запускаю с помощью phpmyadmin, для получения 25 строк данных требуется 1 час. Хотя общее количество данных, которое мне нужно получить, составляет до 3000 строк данных. Может быть, кто-нибудь может помочь мне изменить мой запрос или предложить в python или php скрипте.

* Примечание: здесь мой образец данных

Стол Pasarbubar Изображение 174551

Buletin table

Изображение 174551

  • 0
    я сделал комментарий, чтобы заменить MAX(`0`) в качестве константы 0 и т. д., пока a не застрял в понимании того, что вы используете числа в качестве столбцов, потому что я заметил обратные запаздывания до поздней даты. лучше нормализовать, если это возможно, и применение не сильно зависит от этой структуры.
Теги:
phpmyadmin

1 ответ

0

вместо 13 выберите max.. из них можно использовать один запрос

  SELECT MAX('0') f0_max
    , MAX('1') f1_max
    , MAX('2') f2_max
    , MAX('3') f3_max
    , MAX('4') f4_max
    , MAX('5') f5_max
    , MAX('6') f6_max
    , MAX('7') f7_max
    , MAX('8') f8_max
    , MAX('9') f9_max
    , MAX('10') f0_max
    , MAX('11') f11_max
    , MAX('12') f12_max
    , MAX('13') f13_max  
  FROM rsam_bpptkg.pasarbubar e
  INNER JOIN bul.buletin b ON  e.ss_time BETWEEN b.date_time 
        AND DATE_ADD(b.date_time, INTERVAL 10 SECOND)

и убедитесь, что у вас есть правильный индекс на

 table rsam_bpptkg.pasarbubar column ss_time 

 table  bul.buletin on clumn date_time 

Ещё вопросы

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