複数列のキー (member_id、visitor_id、month_visited) とより正確な日付を使用して、メンバー プロファイルの訪問を記録するために使用される非常に単純なテーブルがあります。month_visited は、「2013-10」のような CHAR(7) 列です。
新しい月ごとに、前月のデータを別のテーブルに圧縮してから削除したいと考えています。
私の要求は単純です:
DELETE FROM visits WHERE month_visited = '2013-10'
私の専用サーバーでは数分のように、これらの行を削除するには AGES かかります。シンプルなSELECT COUNT(*) FROM visits
.
2013-10 には 180 万のエントリがあります。
しかし、それには年月がかかります。そして試してみると
EXPLAIN SELECT * FROM visits WHERE month_visited = "2013-10"
それは私に言います:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE visits ref idx_month_visited idx_month_visited 21 const 1782148 Using where
「どこを使って」、マジ?
EDIT:申し訳ありませんが、month_visited列だけにINDEXを追加したことを指定するのを忘れていました:)(EXPLAINが示すように、実際には使用されません...)
これらの(明らかに)単純なクエリを改善するにはどうすればよいですか? 私は MySQL の初心者ですが、これらのクエリを実行するのに数分かかるのは普通ではないと思います。
ご意見ありがとうございます。
よろしくお願いします、