当二进制字段位于where子句中时如何运行解释查询

问题描述

| 我需要使用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表,因此无法启动查询。 解决方案 修复查询,确保它不会返回空结果集,然后再次运行解释。