1

I have a MySQL query :

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

where

view : auto increment and primary key, (int(11))
address : index , (int(11))
time : index, (int(11))

total rows number of the table is : 270k

this query have slow executing, in mysql-slow.log I got :

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

with use EXPLAIN looks like below:

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

How to improve this query to speed up executing? Maybe better will be if I change date in PHP? But I think in PHP take a date as timestamp next convert to human readable and make "group by" will take more time then one query in MySQL.

Maybe somebody knows how to make this query faster?

4

2 に答える 2

1

関数 date() および FROM_UNIXTIME() をグループ内の時間 by に適用すると、そのフィールドで得られる可能性のあるインデックス作成の利点が失われます。

日ごとにグループ化する必要がある場合、日付列を追加することが、これを高速化する唯一の方法です。それがなければ、グループ化しようとしているセット全体を減らす必要があります。開始日と終了日を追加して、日付範囲を制限することもできます。これにより、変換およびグループ化される日付が減少します。

于 2012-11-04T14:10:29.897 に答える
0

テーブルに列を追加してDATEインデックスを作成することを検討する必要があります。

于 2012-11-04T14:11:22.993 に答える