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

Я написал следующий запрос, но это занимает много времени.Я пытаюсь получить последние записи, вставленные в мою таблицу pm_data_records для каждого узла.Узлы хранятся в таблице pm_info, по одной строке на узел.

Я написал запрос, и мне кажется, что он возвращает мои предполагаемые данные, но это занимает 15 секунд.

Обратите внимание, что у меня больше, чеммиллион записей.

Вот запрос:

SELECT 
    info.pm_detail_id,
    ... , 
    info.pm_min_pressure, 
    datas.`pm_detail_id`,
    ... , 
    MAX(pm_sent_time) 
FROM 
   `pm_data_records` as datas 
RIGHT JOIN pm_info as info 
   ON datas.pm_detail_id = info.pm_detail_id 
GROUP BY 
   info.pm_detail_id 
ORDER BY 
   info.pm_detail_id 

tnx много

1 Ответ

0 голосов
/ 12 марта 2019

Ваш запрос неверен - предложения GROUP BY и SELECT не согласованы.Вот правильная версия:

SELECT i.*, dr.*
FROM pm_info i LEFT JOIN
     pm_data_records dr 
     ON i.pm_detail_id = dr.pm_detail_id AND
        dr.pm_sent_time = (SELECT MAX(dr2.pm_sent_time)
                           FROM pm_data_records dr2
                           WHERE dr2.pm_detail_id = dr.pm_detail_id
                        );

Теперь, когда у вас есть разумный запрос, вы можете поработать над его оптимизацией.Этот запрос хочет индекс на pm_data_records(pm_detail_id, pm_sent_time).

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