У меня медленный запрос MySQL, который использует DATE и CURDATE. Таблицы используются являются:Как исправить медленную MySQL CURDATE Group по запросу
журналы L = 1,760,000 записей (индексы на обновляемые и client_id) клиентов с = 4167 записей (индекс по первичному ключу client_id)
SELECT LEFT(c.client,12) client , COUNT(l.client_id) amount
FROM logs l, customers c
WHERE c.client_id = l.client_id
AND c.client_id NOT IN (5,7,217)
AND DATE(l.updated) = CURDATE()
GROUP BY l.client_id ORDER BY Amount DESC LIMIT 5
Когда я запускаю это запрос занимает 8 секунд. Теперь я понимаю, что таблица журналов имеет близкую к 2MLN записи, но я только прошу, чтобы она получила мой счет сегодня (CURDATE), разве оптимизатор запросов MySQL не получает самые последние записи и не суммирует их с клиентами? Казалось бы взять намного меньше
Explain, для КЭ выше запроса указывает:
1 SIMPLE customer ALL PRIMARY Key(null) ref(null) rows 4167 Using where,using temp,filesort
1 SIMPLE logs ref user_id,idx_client_id user_id rows 5 Using Where
Любые предложения будут оценены
Спасибо, я пробовал это, но все еще не улучшал производительность. То же, что и раньше. – user265505