诺亚方舟

沉淀

mysql大数据量统计mysql_unbuffered_query

mysql_unbuffered_query
(PHP 4 >= 4.0.6, PHP 5)mysql_unbuffered_query — 向 MySQL 发送一条 SQL 查询,并不获取和缓存结果的行

说明resource mysql_unbuffered_query ( string query [, resource link_identifier] )

mysql_unbuffered_query() 向 MySQL 发送一条 SQL 查询 query,但不像 mysql_query() 那样自动获取并缓存结果集。一方面,这在处理很大的结果集时会节省可观的内存。另一方面,可以在获取第一行后立即对结果集进行操作,而不用等到整个 SQL 语句都执行完毕。当使用多个数据库连接时,必须指定可选参数 link_identifier。

注意: mysql_unbuffered_query() 的好处是有代价的:在 mysql_unbuffered_query() 返回的结果集之上不能使用 mysql_num_rows() 和 mysql_data_seek()。此外在向 MySQL 发送一条新的 SQL 查询之前,必须提取掉所有未缓存的 SQL 查询所产生的结果行。

一个实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$user = 'mobile';
$pwd = 'xxxxxxx';
$ip = 'localhost';
$re1 = mysql_connect($ip,$user,$pwd,true);
$re2 = mysql_connect($ip,$user,$pwd,true);
$sql = "select suid,user_name,addtime from otg.o_users";
$rs = mysql_unbuffered_query($sql, $re1);
while($row = mysql_fetch_array($rs)){
        $user_name = $row['user_name'];
        $tbl = 'syudb.sy_user_'.floor(sprintf('%u',crc32($user_name))/257)%256;
        $check_sql = "select * from ".$tbl." where user_name = '$user_name'";
        $check_rs = mysql_query($check_sql, $re2);
        $rs_row = mysql_num_rows($check_rs);
        if(!$rs_row){
                file_put_contents('/tmp/js/check_result.csv',$row['user_name'].",".$row['suid'].",".date('Y-m-d H:i:s',$row['addtime'])."\n",FILE_APPEND);
        }else{
 
                file_put_contents('/tmp/js/check_result_exist.csv',$user_name."\n",FILE_APPEND);
        }
}

另外,这里讲一下mysql_connect()这个函数,注意如果第四个参数没带上true,上面的$re1实际上和$re2是一样的资源符。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>