Создание SQL индексов на старых таблицах - PullRequest
0 голосов
/ 23 марта 2020

У меня есть запрос, который показывает всем рабочим с их первой сменой за последнюю неделю, он собран из двух таблиц и выглядит так:

SELECT MIN(p.start_date),
       CONCAT(c.first_name, ' ', c.last_name) AS 'c.fullname',
       c.temp_nr
FROM contactstable c
LEFT JOIN projectlines p on c.temp_nr = p.candidate_number
WHERE c.contact_type = 'Candidate'
GROUP BY c.temp_nr
HAVING
    MIN(p.start_date)
        between
            DATE_SUB(CURDATE(), INTERVAL (dayofweek(CURDATE())+6) DAY)
            AND DATE_SUB(CURDATE() , INTERVAL (dayofweek(CURDATE())) DAY)

Моя проблема заключается в тайм-ауте запроса, так как я Я понимаю, что мне нужно добавить индексы, но после поиска по нескольким сайтам, я все еще не знаю, как go об этом.

Я использую Workbench 8.0

1 Ответ

1 голос
/ 23 марта 2020

Я бы посоветовал вам написать запрос следующим образом:

SELECT CONCAT(c.first_name, ' ', c.last_name) AS fullname, c.temp_nr,
       (SELECT MIN(p.start_date)
        FROM projectlines p 
        WHERE c.temp_nr = p.candidate_number
       ) as min_start_date
FROM contactstable c
WHERE c.contact_type = 'Candidate'
HAVING min_start_date BETWEEN DATE_SUB(CURDATE(), INTERVAL (dayofweek(CURDATE())+6) DAY) AND
                              DATE_SUB(CURDATE() , INTERVAL (dayofweek(CURDATE())) DAY);

Затем для этого вам понадобятся индексы:

  • contactstable(contact_type, temp_nr, first_name, last_name)
  • projectlines(candidate_number, start_date).
...