2012-05-27 57 views
0

我有這樣的查詢在MySQLMysql的組通過查詢優化

select count(*) 
from (
    select count(idCustomer) 
    from customer_details 
    where ... 
    group by idCustomer having max(trx_staus) = -1 
) as temp 

所以基本上找到客戶數量要達到一定的條件,其中(一個或兩個),最大交易狀態= -1(其他的都可以2, 3,4)。但是這個查詢在我的本地機器上需要大約30分鐘,在高配置服務器上大約需要13秒(大約20 GB RAM和8個核心處理器)。我在桌上有13個lac行。我知道小組和最大功能太昂貴。我可以做些什麼來優化這個查詢。任何建議?

+1

除了'WHERE ...'中的簡單條件以外的任何東西嗎? –

+0

不,沒什麼,以及條件如此簡單,有些時候沒有使用,在上述情況下,我沒有使用過,但它需要一些時間,這就是爲什麼我提到。 –

+0

WHERE,GROUP BY和MAX子句中的所有字段是否相應編制索引? –

回答

0

內部查詢必須檢查所有行以確定聚合最大值;如果您想優化這一點,請將包含最大值的計算字段添加到客戶表中,然後選擇該字段。

然後把這個字段保持爲最新的:)

+0

我不能這樣做,因爲條件不固定... –

+0

你說它只能是-1,2,3和4否? –

+0

它是關於max()函數中的事務狀態 –