mybatis查询一个很长很长的字符串,放进对应的实体,比如数据库有一个字段存了很长的一段中文,查询的时候用实体里用String接。但是很久都查询不出来,然后爆超时的错。如果把这个字段里面的字数减少到比较少,就能很快的查询出来,请问各位大佬,不动数据库的情况下怎么解决这个问题
<p>在不动数据库的基础上,分批次查询再拼接吧</p>
select SUBSTRING(content,1,100) from table
select SUBSTRING(content,100,100) from table
这样多查几次 最后拼起来
<p>用mysql管理工具敲sql代码查询一下呢?</p>
<div class="ref">
用mysql管理工具敲sql代码查询一下呢?
回复 <a class="referer" target="_blank">@银杏果果</a> : 谢谢
最好的报的错误发上来
<p>这么长的字符串就不适合做查询条件了,好比一片文章一样,查询它的意义何在呢。</p>
缩短的办法:用消息摘要的方法,很长的一段中文存储到数据库时,同时计算好它的哈希然后把哈希也存储到表。查询的时候计算哈希,然后直接对哈希做查询,查出来之后的结果再在Java里面做 equals 比对字符串(哈希也是不绝对唯一)。
DEMO表
ID | 长内容 | 内容特征码 |
自增 | 几百字几千字... | MD5 / SHA |
这种肯定可以提高查询效率、降低数据库压力。
谢谢
回复 <a class="referer" target="_blank">@蓝水晶飞机</a> : 我觉得题主的问题不是把长字符串作为条件查询,不然sql中赋值这个条件也是不现实的,他应该就是以其它条件查询出结果中包含这个长字符串。
SELECT * FROM x_table WHERE content_hash=#{hash},如果返回的结果 >1条(说明哈希重复),则在业务里面 equals 查询结果字符串与查询条件字符串,找出匹配的结果行。
<p>应该修改jdbc的默认连接时间吧,把连接时间放长一点试试</p>
谢 谢
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。