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 '?'
- 当使用解释计划而不是绑定变量时,mysql 是否仅支持在 sql 中指定值?
- 如果没有,如何查看绑定变量的执行计划?因为我认为 select * 的执行计划来自地址 where id=?与 id=2.
的地址不同 select *
- 此外,当我在 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。
简而言之:如果 type
是 ALL
(完整 table 扫描)或 index
(完整索引扫描),则您的查询正在执行完整扫描;另一方面,如果 type
是 ref
或 eq_ref
或 range
(以及其他一些不太常见的值),则 key
列表示正在使用的索引用于相等或范围查找。
请注意,一个常见的新手错误是误解了 Extra
列中 Using index
的含义。该指示符存在时,意味着查询所需的所有列都存在于单个索引中,并且优化器将使用该索引作为覆盖索引来读取查询数据,而不是从 table 中读取数据本身——不要将此标志与索引查找混淆。
我想查看 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 '?'
- 当使用解释计划而不是绑定变量时,mysql 是否仅支持在 sql 中指定值?
- 如果没有,如何查看绑定变量的执行计划?因为我认为 select * 的执行计划来自地址 where id=?与 id=2. 的地址不同 select *
- 此外,当我在 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。
简而言之:如果 type
是 ALL
(完整 table 扫描)或 index
(完整索引扫描),则您的查询正在执行完整扫描;另一方面,如果 type
是 ref
或 eq_ref
或 range
(以及其他一些不太常见的值),则 key
列表示正在使用的索引用于相等或范围查找。
请注意,一个常见的新手错误是误解了 Extra
列中 Using index
的含义。该指示符存在时,意味着查询所需的所有列都存在于单个索引中,并且优化器将使用该索引作为覆盖索引来读取查询数据,而不是从 table 中读取数据本身——不要将此标志与索引查找混淆。