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

 赛亚兔备_393 发布于 2022-10-26 20:40

今天下午和同事发生因为判断数据是否在数据库中已存在产生分歧.简易代码如下:

    //观点一,先取出数据库中已存在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 个回答
  • 可不可以分段 取到内存里 这样能减轻内存占用

    2022-11-12 01:40 回答
  • 建议是使用先把id从数据库中取出来,然后在内存中比较的方法,这样可以减少数据库的访问。

    2022-11-12 01:40 回答
  • https://www.zhihu.com/questio...

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

    2022-11-12 01:40 回答
  • 推荐方法二,但这样做查询会比较快:

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

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

    2022-11-12 01:40 回答
  • 其实第一个你要拿实际数据量来估算,如果ID是Long类型,数据量100W,也才只有 8byte * 100W = 7.629 megabytes。

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

    2022-11-12 01:40 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有