MySQL未对两列日期范围使用索引
我有一个包含数百万行的表,其中有2个MySQL未对两列日期范围使用索引,mysql,Mysql,我有一个包含数百万行的表,其中有2个DATE列,用于指定开始和结束日期范围。我对这两列有一个单独的索引,但它没有被使用,查询需要10秒才能运行,这是完全不可接受的。我的问题很简单: SELECT * FROM `events` WHERE `valid_from` <= "2013-05-05" AND `valid_to` >= "2013-05-05" 检查字段在索引和查询中的顺序。 还有,表演 EXPLAIN SELECT * FROM `events` WHERE `va
DATE
列,用于指定开始和结束日期范围。我对这两列有一个单独的索引,但它没有被使用,查询需要10秒才能运行,这是完全不可接受的。我的问题很简单:
SELECT * FROM `events` WHERE `valid_from` <= "2013-05-05" AND `valid_to` >= "2013-05-05"
检查字段在索引和查询中的顺序。 还有,表演
EXPLAIN SELECT * FROM `events` WHERE `valid_from` <= "2013-05-05" AND `valid_to` >= "2013-05-05"
EXPLAIN SELECT*FROM`events`WHERE`valid\u FROM`=“2013-05-05”
尝试使用索引提示
SELECT * FROM `events` USE INDEX (`valid_from_to`)
WHERE `valid_from` <= "2013-05-05" AND `valid_to` >= "2013-05-05"
SELECT*FROM`events`使用索引(`valid\u FROM\u to`)
其中,`valid_from`=“2013-05-05”
或者为每个字段创建两个索引,而不是一个。请试试这个,nathanjosiah:
SELECT *
FROM `events` FORCE INDEX (valid_from_to)
WHERE `valid_from` <= "2013-05-05" AND `valid_to` >= "2013-05-05"
选择*
FROM`events`强制索引(有效的从到)
其中,`valid_from`=“2013-05-05”
力指数应该可以解决您的问题。;-) 请使用解释并将结果发布在这里。@medina我发布了
EXPLAIN
这是一个很好的评论,但是没有回答OP的问题,索引暗示什么也不做,索引强制导致解释声称它使用了索引,但它仍然扫描所有200万行,并且仍然需要10秒才能完成run@zoonman为每一列添加单独的索引修复了这个问题,但我不能想象这是非常有效的。没有更好的方法了吗?我想,查询优化器有一个问题。您可以阅读这篇文章,这样做会导致EXPLAIN
声称它使用了索引,但它仍然扫描所有200万行,并且仍然需要10秒才能运行
SELECT *
FROM `events` FORCE INDEX (valid_from_to)
WHERE `valid_from` <= "2013-05-05" AND `valid_to` >= "2013-05-05"