mysql 无法显示说明数据

mysql cannot show explain data

我想查看 sql 的执行计划:

explain select name,address from address where id=?

但它说:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?'

  1. 当使用解释计划而不是绑定变量时,mysql 是否仅支持在 sql 中指定值?
  2. 如果没有,如何查看绑定变量的执行计划?因为我认为 select * 的执行计划来自地址 where id=?与 id=2.
  3. 的地址不同 select *
  4. 此外,当我在 mysql 中使用 explain 时,它没有显示此 sql 将像 Oracle 一样完全 table 访问或索引访问等,所以我怎么能看到这些信息?

您看不到使用 ? 占位符的查询计划,因为每次执行查询时优化器都会根据提供的特定值创建查询计划。

I think the execute plan of select * from address where id=? is different select * from address where id=2

如果绑定值为“2”,则计划相同。没有没有特定值的默认计划是不存在的。它是在每次调用准备好的语句时创建的,因为不同的值可能会调用不同的计划,具体取决于索引潜水的结果。

Also, when I use explain in mysql, it does not show this sql will be full table access or index access ect

是的,确实如此。不是以叙述的形式,但信息是用来解释的。请参阅文档中的 EXPLAIN Output Format

简而言之:如果 typeALL(完整 table 扫描)或 index(完整索引扫描),则您的查询正在执行完整扫描;另一方面,如果 typerefeq_refrange(以及其他一些不太常见的值),则 key 列表示正在使用的索引用于相等或范围查找。

请注意,一个常见的新手错误是误解了 Extra 列中 Using index 的含义。该指示符存在时,意味着查询所需的所有列都存在于单个索引中,并且优化器将使用该索引作为覆盖索引来读取查询数据,而不是从 table 中读取数据本身——不要将此标志与索引查找混淆。