问题描述
|
我需要使用EXPLAIN在MysqL上检查以下查询的查询计划。
但是问题是where子句中的列是binary(16)。它的引导。
explain select `title`,`ttext`
FROM ptip inner join user on user.id = ptip.userId
where ptip.titlehash = <whatever value>
这里的titlehash是binary(16),查询给出以下错误:
\'在读取const表后不可能在哪里注意到\'
我尝试使用;其中ptip.titlehash = BINARY(\'24dwdfsdf \')但仍然相同;
您如何运行上述查询?
解决方法
好的,这就是我最终解决它的方法;
SET @hs = (SELECT titlehash FROM ptip WHERE id = 5673);
EXPLAIN SELECT `title`,`ttext`
FROM ptip INNER JOIN USER ON user.id = ptip.userId
WHERE ptip.titlehash = @hs
我将值放在@hs变量中,然后用于解释。幸运的是,explain命令仅解释选择。它不在乎SET操作,并将@hs变量视为一个值
,
读取const表后,不可能在哪里注意到
这是什么意思:
“ 2”表示MySQL已经注意到连接中只有一行可以匹配。相反,如果在查询中读取此内容,它将此行存储在ѭ3中
根据MySQL手册:
该表最多具有一个匹配行,该行在查询开始时读取。因为只有一行,所以优化器的其余部分可以将这一行中列的值视为常量。 const表非常快,因为它们只能读取一次。
问题
您在这里遇到的问题是MySQL注意到联接中没有匹配的行。因此,MySQL无法将行读入const表,因此无法启动查询。
解决方案
修复查询,确保它不会返回空结果集,然后再次运行解释。