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是一样的资源符。