2012-11-04 84 views
1

我有一個MySQL查詢:加快MySQL查詢與組由

SELECT date(FROM_UNIXTIME(time)) as date, 
count(view) as views 
FROM ('table_1') 
WHERE 'address' = 1 
GROUP BY date(FROM_UNIXTIME(time)) 

其中

view:自動遞增和主鍵,(INT(11))
address:指數,(INT (11))
time:指數,(INT(11))

總的行數表中的是:270k

此查詢已執行緩慢,在MySQL-的slow.log我:

Query_time:1.839096
Lock_time:0.000042
Rows_sent:155
Rows_examined:286435

與使用EXPLAIN的面貌如下:

 
id  select_type  table  type possible_keys key  key_len  ref  rows  Extra 
1  SIMPLE   table_1  ref  address   address 5   const 139138  Using where; Using temporary; Using filesort 

如何改進這個查詢來加速執行?如果我在PHP中更改日期也許會更好?但我認爲在PHP中將日期作爲時間戳,然後轉換爲人類可讀的,並且使得「group by」將花費更多時間,然後在MySQL中執行一個查詢。

也許有人知道如何使這個查詢更快?

+1

你試過刪除FROM_UNIXTIME嗎? –

回答

1

當您將函數date()和FROM_UNIXTIME()應用於組中的時間時,您將終止該字段中的任何索引優勢。

添加一個日期列將是我可以看到加快這一點,如果你需要它按天分組的唯一方法。沒有它,你需要將你想要分組的整個集合刪除。您可以添加開始/結束日期來限制日期範圍。這會減少正在變換和分組的日期。

+0

那麼,你將如何解決它?你可以再寫一點嗎? – stefek143

+0

@ stefek143看到我的更新。 – Ray

+0

好吧,我會盡量使用你的解決方案,Thx! – stefek143

0

您應該考慮在表中添加一個額外的DATE列並對其進行索引。