Самый быстрый способ выполнить сложный запрос в большом SQL - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть данные 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 pasarbubar table

Булетный стол

buletin table

1 Ответ

0 голосов
/ 04 апреля 2019

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

  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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...