java - 判断数据在数据库中是否已存在.
怪我咯
怪我咯 2017-04-18 10:54:26
0
6
921

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

    //观点一,先取出数据库中已存在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)
迷茫

사실 가장 먼저 추정해야 할 것은 실제 데이터 양입니다. ID가 Long 유형이고 데이터 양이 100W라면 8byte * 100W = 7.629MB에 불과합니다.

두 번째는 꼭 필요합니다. 루프에서 각 ID를 쿼리하는 것입니다.

Peter_Zhu

권장되는 두 번째 방법이지만 이 쿼리가 더 빠릅니다.

으아아아

데이터베이스마다 매개변수에 대한 제한이 있습니다. ?1,000을 초과하지 않는 것이 가장 좋습니다. 10,000개의 ID를 결정해야 하는 경우 해당 쿼리를 10개 사용하세요.

黄舟

@auntyellow님이 알려주신 방법을 이용해서 일괄적으로 쿼리하는 것이 더 좋을 것 같습니다. ID가 많은 경우 다른 배치 방식으로 확인할 수 있는지 고려해보세요. 예를 들어 일정 기간 동안 모든 id을 한 번에 가져오고 이를 달성하려면 방법 1을 약간 개선하세요.
방법 1과 방법 2가 모두 극단적인 것 같아서 두 방법을 조합하는 것이 좋은 해결책이 될 것입니다.

黄舟

https://www.zhihu.com/questio...

刘奇

먼저 데이터베이스에서 ID를 가져온 후 메모리에서 비교하는 방법을 사용하는 것이 좋습니다. 이는 데이터베이스 액세스를 줄일 수 있습니다.

洪涛

메모리로 분할할 수 있나요? 이렇게 하면 메모리 사용량을 줄일 수 있나요?

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!