注意:原始问题没有实际意义,但请扫描到底部以查找相关内容。
我有一个要优化的查询,看起来像这样:
select cols from tbl where col = "some run time value" limit 1;
我想知道正在使用什么键,但无论我通过什么来解释,它都能够将 where 子句优化为无(“不可能 WHERE 注意到......”),因为我给它提供了一个常数。
- 有没有办法告诉mysql不要在解释中进行持续优化?
- 我错过了什么吗?
- 有没有更好的方法来获取我需要的信息?
编辑:EXPLAIN
似乎给了我由常量值产生的查询计划。由于查询是存储过程的一部分(并且 spocs 中的 IIRC 查询计划是在调用它们之前生成的),这对我没有好处,因为值不是恒定的。我想要的是找出优化器在不知道实际值是什么时会生成什么查询计划。
我错过了什么吗?
Edit2:在别处询问,似乎 MySQL 总是重新生成查询计划,除非你不遗余力地让它重新使用它们。即使在存储过程中。由此看来,我的问题似乎没有实际意义。
但是,这并没有使我真正想知道的事情变得毫无意义: 您如何优化包含在任何特定查询中恒定的值的查询,但是我,程序员,事先不知道将使用什么值?-- 例如,假设我的客户端代码正在生成一个在其where
子句中带有数字的查询。有时该数字会导致不可能的 where 子句,有时则不会。我如何使用解释来检查查询的优化程度?
我立即看到的最佳方法是EXPLAIN
针对存在/不存在案例的完整矩阵运行它。确实,这不是一个很好的解决方案,因为手工操作既困难又容易出错。