我有兩個表 - 一個叫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