码迷,mamicode.com
首页 > 数据库 > 详细

数据库sql的in操作,解决in的过多

时间:2016-08-07 21:38:08      阅读:1176      评论:0      收藏:0      [点我收藏+]

标签:

  一个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
}

 

数据库sql的in操作,解决in的过多

标签:

原文地址:http://www.cnblogs.com/firstForEver/p/5747120.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!