我有一个非常简单的表,用于在成员配置文件上记录访问,具有多列键(member_id,visitor_id,month_visited)和更精确的日期。 month_visited是一个类似CHAR(7)的列:'2013-10'Mysql没有在哪里使用索引
每个新月,我想在另一个表中压缩上个月的数据,然后删除它。
我的要求很简单:
DELETE FROM visits WHERE month_visited = '2013-10'
它需要年龄删除这些行,就像我的专用服务器上几分钟。当我查询简单的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
“使用,其中”,严重?
编辑:对不起,我忘了指定,我还增加了指数只是month_visited列:)(如EXPLAIN显示,实际上,但它不使用它...)
我怎么能改善这些(显然)简单的查询?我是MySQL的noob,但我不认为这是很正常的,它需要几分钟时间来执行这些查询。
感谢您的任何意见!如果第一关键部件均在条件中使用
此致
这张表有多少行? –
我在问,因为在我有限的体验中,当没有使用索引时,它通常是因为使用它并没有什么帮助;也就是说,与全表扫描相比,它不会节省太多时间(当索引的基数很低时,这往往会发生) –
另外,删除是一个“写”操作。索引优化读操作,代价是写操作更加昂贵(因为写操作时索引重建)。所以,你有一些复杂的指数这一事实并没有帮助,但会加重问题。 –