【发布时间】:2017-03-24 02:39:15
【问题描述】:
我有一个 innodb 表,表上的查询如下所示。
SELECT *
FROM x
WHERE now() BETWEEN a AND b
我在 (a,b) 上创建了一个复合索引,查询返回大约 4k 行,而表中的总行数大约是 700k。
但是,当我得到执行计划的EXPLAIN 时,我发现查询没有使用预期的索引。因为估计rows在360k左右,比实际值大很多。
我知道就像许多帖子(例如Why the rows returns by "explain" is not equal to count()?)所解释的那样,EXPLAIN 只能得到粗略的估计。但是FORCE INDEX的解决方案非常棘手,未来可能会带来潜在的性能风险。
有什么方法可以让 MySQL 得到更准确的估计(目前的估计是 90 倍)?谢谢。
【问题讨论】:
-
不,使用索引失败,因为索引没用。扫描表效率更高。
标签: mysql sql innodb explain sql-execution-plan