Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL未对两列日期范围使用索引_Mysql - Fatal编程技术网

MySQL未对两列日期范围使用索引

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

我有一个包含数百万行的表,其中有2个
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"