我有两个表 - 一个叫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
这是伟大的 - 它列出了每个客户ID和他们的最后一个动作。但查询是极端缓慢的场合(注:在customer_records
有近2万条记录)。任何人都可以提供关于如何将查询的这个怪物排序或调整我的表以提供更快结果的任何提示?我正在使用MySQL。任何帮助真的很感激,谢谢。
编辑:为了清楚起见,我需要查看上次操作是“无论”的客户列表。
这是否意味着如果客户的最后一个动作(由ActionDate)是*不是*'无论'那么该客户不应该被列出?对于列出的客户,您是否只想要客户,或者他们最后的行动,还是他们所有的行为? – MatBailie 2011-12-23 00:31:13
@Dems如果客户的最新'ActionType'不是'任何',那么他们不应该被显示。对于那些拥有最新'ActionType'的'无论'我都需要'customer_records'的信息 - 但这并不需要在一个查询中全部覆盖。 – Jonathon 2011-12-23 00:41:28