java - 判断数据在数据库中是否已存在.
问题描述
今天下午和同事发生因为判断数据是否在数据库中已存在产生分歧.简易代码如下:
//观点一,先取出数据库中已存在ID存入内存,再进行判断 //数据太多情况,内存爆炸 DateTable dt = ExcuteSQL(’SELECT ID FROM TABLE’);//List为数据集,已经去重 foreach(var item in List){//观点二,在for循环中根据ID查询是否已存在//for循环执行数据库?没这么干过DateTable dt = ExcuteSQL(string.format(’SELECT ID FROM TABLE WHERE ID = {0}’,item.ID));//判断是否在dt中存在...bool ISContain...//不存在 if(!ISContain){ //加入事物SQL列表 SQLList.Add(’INSERT INTO ........’); } }//执行事物 ....
问题解答
回答1:其实第一个你要拿实际数据量来估算,如果ID是Long类型,数据量100W,也才只有 8byte * 100W = 7.629 megabytes。
第二个肯定要不得,在循环中对每个ID去查询。
回答2:推荐方法二,但这样做查询会比较快:
SELECT id FROM table WHERE id IN (?, ?, ?, ...)
注意,不同的数据库对参数是有限制的,?最好不要超过1千个。如果你需要判断1万个id,就用10次这样的查询。
回答3:利用 @auntyellow 同学所说的方法应该比较好,批量查询。当ID比较多时,考虑是否可以按其它的批量方式去查?比如一次拿一段时间的所有id,把方法一稍加改进来实现。感觉不管是方法一还是方法二都走了极端,所以好的解决方法应该是中合两者的结果。
回答4:https://www.zhihu.com/questio...
回答5:建议是使用先把id从数据库中取出来,然后在内存中比较的方法,这样可以减少数据库的访问。
回答6:可不可以分段 取到内存里 这样能减轻内存占用
相关文章:
1. javascript - fis3使用MD5但是如何引用?2. 网页爬虫 - python爬虫翻页问题,请问各位大神我这段代码怎样翻页,还有价格要登陆后才能看到,应该怎么解决3. javascript - JAVA写的H5页面能否解释一下流程4. css - 怎么实现一个圆点在一个范围内乱飞5. python 计算两个时间相差的分钟数,超过一天时计算不对6. javascript - 使用form进行页面跳转,但是很慢,如何加一个Loading?7. docker-machine添加一个已有的docker主机问题8. docker-compose中volumes的问题9. angular.js - 输入邮箱地址之后, 如何使其自动在末尾添加分号?10. javascript - 后台管理系统左侧折叠导航栏数据较多,怎么样直接通过搜索去定位到具体某一个菜单项位置,并展开当前菜单
