выполнение запроса из нескольких таблиц с использованием внутренних соединений занимает много времени

#join #count

#Присоединиться #подсчет

Вопрос:

 I have an sql query below that is taking too long to execute. kindly check the query and optimise it for me, i need to count number of files from a file_Actions table but combining it three other tables using inner join

SELECT count(*) as total 
FROM (SELECT t1.cfid as cfid,MAX(t1.timestamp) d 
FROM file_actions t1 
INNER JOIN case_files t2 ON t2.cfid=t1.cfid 
INNER JOIN case_file_allocations t3 ON t1.cfid=t3.cfid
INNER JOIN cbeta_user t4 
WHERE t4.id=t1.user_id 
AND t4.team_leader='$user' and t2.closed<>'yes' AND
t2.deleted<>1 AND
t3.reallocated<>'yes' GROUP BY t1.cfid) a 
WHERE d < '$yesterday'
  

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

Ответ №1:

Попробуйте включить WHERE d < '$yesterday' в подзапрос a . Удалите поля и установите значение Count(*). Если ваши таблицы не проиндексированы по тем значениям, которые вы используете для условий и отношений, попробуйте создать индекс.

 SELECT count(*) as total
  FROM file_actions t1 
  INNER JOIN case_files t2 
               ON t2.cfid=t1.cfid 
  INNER JOIN case_file_allocations t3 
               ON t1.cfid=t3.cfid
  INNER JOIN cbeta_user t4 
WHERE t4.id=t1.user_id 
 AND t4.team_leader='$user' and t2.closed<>'yes' 
 AND t2.deleted<>1 
 AND t3.reallocated<>'yes' 
 AND d < '$yesterday'
GROUP BY t1.cfid
  

Рекомендуемое чтение: http://www.code-fly.com/5-tips-to-make-your-sql-queries-faster /

Комментарии:

1. Мне нужно иметь только количество файлов из таблицы file_actions, у которых последняя временная метка < $yesterday

2. Вероятно, группировка по cfid также не требуется. Если это идентификатор, я полагаю, что он не повторяется.

3. столбец d в вашем случае будет неизвестен

4. Я вижу … проблему с копированием-вставкой.