私は以下のようなテーブル構造を持っています:
id item_id created
1 5 2012-09-05 09:37:59
2 5 2012-09-05 10:25:09
3 5 2012-09-05 11:05:09
4 1 2012-09-05 10:25:09
5 3 2012-09-05 03:05:01
次のようにWHERE句を使用して現在の日付を渡すことで、どのitem_idが最も多く表示されるかを知りたい:
SELECT item_id, COUNT( id ) AS TOTAL
FROM stats_item
WHERE DAY( created ) = '05'
AND MONTH( created ) = '07'
AND YEAR( created ) = '2013'
GROUP BY item_id
ORDER BY TOTAL DESC
LIMIT 0 , 30
MySql の結果クエリ
Showing rows 0 - 29 ( 30 total, Query took 4.1747 sec)
最大4.1747秒かかります
以下は表のインデックスです
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
stats_item 0 PRIMARY 1 id A 2575580 NULL NULL BTREE
stats_item 1 created 1 created A 515116 NULL NULL YES BTREE
WHERE 句を使用したクエリと、YEAR、MONTH、DAY を使用したフィルターでクエリに時間がかかるのはなぜですか?
================================== EXPLAINで編集:
Field Type Null Key Default Extra
id int(11) unsigned NO PRI NULL auto_increment
item_id int(11) unsigned YES NULL
created timestamp YES MUL NULL