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

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

    //观点一,先取出数据库中已存在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 ........');
         }
    }
    
    //执行事物
    ....

怪我咯
怪我咯

走同样的路,发现不同的人生

membalas semua(6)
迷茫

Malah, perkara pertama yang perlu anda anggarkan ialah jumlah data sebenar Jika ID adalah jenis Long dan jumlah data ialah 100W, ia hanya akan menjadi 8bait * 100W = 7.629 megabait.

Yang kedua sangat diperlukan, tanya setiap ID dalam satu gelung.

Peter_Zhu

Kaedah 2 yang disyorkan, tetapi pertanyaan ini akan menjadi lebih pantas:

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

Perhatikan bahawa pangkalan data yang berbeza mempunyai sekatan pada parameter ?Sebaik-baiknya tidak melebihi 1,000. Jika anda perlu menentukan 10,000 ID, gunakan 10 pertanyaan sedemikian.

黄舟

Sepatutnya lebih baik menggunakan kaedah yang disebut oleh @auntyellow dan bertanya secara berkelompok. Apabila terdapat banyak ID, pertimbangkan sama ada anda boleh menyemaknya dalam kaedah kelompok lain? Sebagai contoh, ambil semua id untuk satu tempoh masa sekali gus dan perbaiki sedikit kaedah 1 untuk mencapai ini.
Rasanya kedua-dua Kaedah 1 dan Kaedah 2 adalah melampau, jadi penyelesaian yang baik haruslah gabungan kedua-duanya.

黄舟

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

刘奇

Adalah disyorkan untuk menggunakan kaedah pertama mengambil ID daripada pangkalan data dan kemudian membandingkannya dalam ingatan, yang boleh mengurangkan akses pangkalan data.

洪涛

Bolehkah ia dibahagikan kepada ingatan ini boleh mengurangkan penggunaan memori

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!