У меня есть две таблицы - одна называется customer_records
, а другая - customer_actions
.
customer_records
имеет следующую схему:
CustomerID (auto increment, primary key)
CustomerName
...etc...
customer_actions
имеет следующую схему:
ActionID (auto increment, primary key)
CustomerID (relates to customer_records)
ActionType
ActionTime (UNIX time stamp that the entry was made)
Note (TEXT type)
Каждый раз, когда пользователь выполняет действие с записью клиента, в customer_actions
вводится запись, и пользователю предоставляется возможность ввести заметку. ActionType
может быть одним из нескольких значений (например, «Обязательное обновление» или «Дополнительная информация о регистре» - может быть только одним из списка параметров).
Что я хочу сделать, это отобразить список записей из customer_records
, где последний ActionType
имел определенное значение.
Пока что я искал в сети / SO и нашел этого монстра:
SELECT * FROM (
SELECT * FROM (
SELECT * FROM `customer_actions` ORDER BY `EntryID` DESC
) list1 GROUP BY `CustomerID`
) list2 WHERE `ActionType`='whatever' LIMIT 0,30
Что здорово - в нем перечислены все идентификаторы клиентов и их последние действия. Но в некоторых случаях запрос чрезвычайно медленный (примечание: в customer_records
есть около 20 000 записей). Может кто-нибудь предложить какие-либо советы о том, как я могу отсортировать этого монстра запроса или настроить свою таблицу, чтобы дать более быстрые результаты? Я использую MySQL. Спасибо за любую помощь, спасибо.
Редактировать: Чтобы было ясно, мне нужно увидеть список клиентов, у которых последнее действие было «что угодно».