數據庫sql的in操作,解決in的過多


  一個sql的拼寫后,服務器會把這個sql傳送到數據庫服務器執行,一般不在一個物理機上。那么傳送需要走網絡,包丟失等網絡情況就可能出現。

  一般情況,一個sql的長度不會很大,但是有種這樣的情況。in操作時,這些數據來源於外部,不好預估有多少。此時,最好不要貿然把所有字符串都通過這一個sql拼進去。此時這個sql長度很長,就可能發生超過數據庫的限制max_allowed_packet,而且sql過長,數據庫的效率也不會很高。因此,很容易想到的是,分批執行。把這個數據按等長進行分割。比如一次執行500個。

  簡單寫個函數,比如這個in數據是個php數組過來的。

$in_data = array();// in過來的數組
$row_num = 500;// 每次500個
$rows = ceil(count($in_data)/$row_num);// 幾組
for($i = 0; $i < $rows; $i++){
    $ids = implode("','", array_splice($in_data, 0, $row_num));
    $ids = "'". $ids. "'";
    // sql exec
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM