微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决当二进制字段位于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表,因此无法启动查询。 解决方案 修复查询,确保它不会返回空结果集,然后再次运行解释。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。