为了账号安全,请及时绑定邮箱和手机立即绑定

判断数据在数据库中是否已存在.

判断数据在数据库中是否已存在.

狐的传说 2019-03-01 11:12:28
今天下午和同事发生因为判断数据是否在数据库中已存在产生分歧.简易代码如下: //观点一,先取出数据库中已存在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 ........'); } } //执行事物 ....
查看完整描述

6 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

其实第一个你要拿实际数据量来估算,如果ID是Long类型,数据量100W,也才只有 8byte * 100W = 7.629 megabytes。

第二个肯定要不得,在循环中对每个ID去查询。

查看完整回答
反对 回复 2019-03-01
?
白板的微信

TA贡献1883条经验 获得超3个赞

推荐方法二,但这样做查询会比较快:

SELECT id FROM table WHERE id IN (?, ?, ?, ...)

注意,不同的数据库对参数是有限制的,?最好不要超过1千个。如果你需要判断1万个id,就用10次这样的查询。

查看完整回答
反对 回复 2019-03-01
?
慕斯709654

TA贡献1840条经验 获得超5个赞

利用批量查询。当ID比较多时,考虑是否可以按其它的批量方式去查?比如一次拿一段时间的所有id,把方法一稍加改进来实现。
感觉不管是方法一还是方法二都走了极端,所以好的解决方法应该是中合两者的结果。

查看完整回答
反对 回复 2019-03-01
?
万千封印

TA贡献1891条经验 获得超3个赞

建议是使用先把id从数据库中取出来,然后在内存中比较的方法,这样可以减少数据库的访问。

查看完整回答
反对 回复 2019-03-01
?
噜噜哒

TA贡献1784条经验 获得超7个赞

可不可以分段 取到内存里 这样能减轻内存占用

查看完整回答
反对 回复 2019-03-01
  • 6 回答
  • 0 关注
  • 823 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号