#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. Я вижу … проблему с копированием-вставкой.