Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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_Database_Oracle_Explain - Fatal编程技术网

mysql无法显示解释数据

mysql无法显示解释数据,mysql,database,oracle,explain,Mysql,Database,Oracle,Explain,我想看看sql的执行计划: explain select name,address from address where id=? 但它说: 您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近“?” 当使用explain plan而不是绑定变量时,mysql是否只支持在sql中指定值? 如果没有,如何查看绑定变量的执行计划?因为我认为select*from address的执行计划id=?与id=2的地址select*不同。 另外,当我在mysql中使用e

我想看看sql的执行计划:

explain select name,address from address where id=?
但它说:

您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近“?”

当使用explain plan而不是绑定变量时,mysql是否只支持在sql中指定值? 如果没有,如何查看绑定变量的执行计划?因为我认为select*from address的执行计划id=?与id=2的地址select*不同。 另外,当我在mysql中使用explain时,它并没有显示此sql将像Oracle一样是完全表访问或索引访问等,所以我如何才能看到这些信息?
您无法使用查看查询计划?占位符,因为每次根据提供的特定值执行查询时,优化器都会创建查询计划

我认为select*from address的执行计划,其中id=?与id=2的地址select*不同

如果2是界值,则计划将是相同的。没有默认的计划,没有特定的值。它是在每次调用prepared语句时创建的,因为不同的值可能会调用不同的计划,这取决于索引剥离的结果

另外,当我在mysql中使用explain时,它没有显示此sql将是完全表访问或索引访问等

是的。不是以叙述的形式,但信息是用来解释的。请参阅文档中的

简言之:如果类型是全表扫描或索引全索引扫描,则您的查询正在进行完全扫描;另一方面,如果类型为ref或eq_ref或range以及其他一些不太常见的值,则键列表示用于相等或范围查找的索引


请注意,一个常见的新手错误是误解了在额外列中使用索引的含义。如果存在此指示器,则表示查询所需的所有列都存在于一个索引中,并且优化器将使用该索引作为覆盖索引来读取查询数据,而不是从表数据本身读取数据-此标志不能与索引查找混淆。

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

我认为select*from address的执行计划,其中id=?与id=2的地址select*不同

如果2是界值,则计划将是相同的。没有默认的计划,没有特定的值。它是在每次调用prepared语句时创建的,因为不同的值可能会调用不同的计划,这取决于索引剥离的结果

另外,当我在mysql中使用explain时,它没有显示此sql将是完全表访问或索引访问等

是的。不是以叙述的形式,但信息是用来解释的。请参阅文档中的

简言之:如果类型是全表扫描或索引全索引扫描,则您的查询正在进行完全扫描;另一方面,如果类型为ref或eq_ref或range以及其他一些不太常见的值,则键列表示用于相等或范围查找的索引


请注意,一个常见的新手错误是误解了在额外列中使用索引的含义。如果存在此指示器,则表示查询所需的所有列都存在于单个索引中,并且优化器将使用该索引作为覆盖索引来读取查询数据,而不是从表数据本身读取数据-此标志不能与索引查找混淆。

谢谢您的回答,我误解了Oracle和MySql的执行计划,因为Oracle的执行计划可能会有?在sql中。同时,我看到了您对explain输出格式的参考,它似乎没有像Oracle那样的“成本”、“时间”、“CPU成本”等信息,因此我们可以使用数字来了解或比较执行计划?还有其他信息,包括成本估算,这可以通过使用找到,但是这些细节应该是不必要的,除非您试图理解优化器是如何选择它所做的计划的。我无法回答Oracle。谢谢你的回答,我误解了Oracle和MySql的执行计划,因为Oracle的执行计划可以?在sql中。同时,我看到了您对explain输出格式的参考,它似乎没有像Oracle那样的“成本”、“时间”、“CPU成本”等信息,因此我们可以使用数字来了解或比较执行计划?还有其他信息,包括成本估算,这可以通过使用找到,但是这些细节应该是不必要的,除非您试图理解优化器是如何选择它所做的计划的。我不能称呼甲骨文。