MySQL设置唯⼀键约束(unique)
前⾔:
最近在优化⼀个功能,这个功能就是将80000 条数据按照分页分段获取,⾸先获取的是前1000条数据,将这些数据按照⼀定的规则解析完以后,使⽤ jdbcTemplate 的batchUpdate 批量导⼊功能将数据保存到数据库中,这1000条数据解析的时间随着表中数据不断累加⽽加长,因为我这个猪脑⼦写了⼀个有则不添加数据,⽆则添加数据的逻辑,导致这速度是不忍直视。
jdbctemplate查询一条数据后⾯在优化过程我想着不如给表设置⼀个唯⼀约束吧,
在Native Premiumn中设计⼀下表,点到索引⾥⾯,将我下⾯这些值设置进去。由于我想将description这个字段设置成唯⼀约束,但是MySql 报错了,提⽰字段长度过长⽆法设置,此时我这个description字段的类型是text
后⾯问了⼀下度娘 ,提供了⼀个好的解决办法,重新建⼀个字段,将原来description中的值通过md5 加密的⽅式保存到数据库,通过对这个新添加的description_md5这个字段设置唯⼀约束,当然了,加密⽅式可以⾃由选择,这样的话 唯⼀约束也已经建⽴起来。description_md5 这个字段的最⼤长度为255。
最后⼀个重要环节出来了,当我将⼀个字段插⼊到数据库成功后,第⼆次遇到相同字段的值程序直接报错。
在使⽤jdbcTemplate 保存的时候我的sql⽤的是insert ,将这个insert into 换成replace 已解决。
replace 第⼀次插⼊数据成功,第⼀次会将原来的数据删除,重新⽣成⼀条,百度上还有⼀种⽅式是inse
rt 字段替换为ingore,我试了⼀下没有效果。
最后⼩伙伴们可能有些疑问,第⼀个问题可能是为什么我要⽤jdbcTemplate的批量导⼊功能,⽽不使⽤JPA 等⽅法,原因是⼩编这个功能的数据量很⼤,⼩编测试过了 在⼤数据的情况下,使⽤jdbcTemplate的批量导⼊的写法会将JPA的快, 50w数据能快2,3分钟。
第⼆个疑问是⼩编你的技术还不是很过关啊
哈哈 我接受。⼩编会努⼒的。
如果你有什么好的解决办法的话欢迎评论区留⾔互动,
如果觉得⼩编写的不错的话,不妨给⼩编⼀个赞吧 哈哈!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论