监理公司管理系统 | 工程企业管理系统 | OA系统 | ERP系统 | 造价咨询管理系统 | 工程设计管理系统 | 甲方项目管理系统 | 签约案例 | 客户案例 | 在线试用
X 关闭
鹰潭网站建设公司

当前位置:工程项目OA系统 > 泛普各地 > 江西OA系统 > 鹰潭OA > 鹰潭网站建设公司

PHP/MYSQL 查询大数据/遍历表

申请免费试用、咨询电话:400-8352-114

鹰潭网站建设www.diyphp.net

PHP:PHP 5.3.6 (cli) (built: Jun 15 2011 16:29:50)

  MYSQL:5.1.51

  假如我们有的一张表有几百万或几万万的记载,我们要运用 PHP 将一切的记载都获取过来(遍历数据表)进行处置。查询语句:

<span style="COLOR: rgb(0,128,0)">  SELECT * FROM largetable;

  PS:为了证实上面的做法是最佳的方法,我测验运用 largetable 中的一个字段做 where ,以及 LIMIT,OFFSET 。上面那种 WHERE 取得后果很慢,固然用了索引。后面这种 LIMIT 可以让你有一种想死的觉得(有兴致可以调查下,《分页优化》)。

  以 MYSQL 以及PDO_MYSQL 为例,测验直接运用以下代码,必定会呈现超内存的状况:

<span style="COLOR: rgb(0,128,0)">  $result = mysql_query($sql);

<span style="COLOR: rgb(0,128,0)">  while ($rowset = mysql_fetch_assoc($mysql)) {

<span style="COLOR: rgb(0,128,0)">  ...

<span style="COLOR: rgb(0,128,0)">  $stmt = $dbh->prepare($sql);

<span style="COLOR: rgb(0,128,0)">  $stmt->execute();

<span style="COLOR: rgb(0,128,0)">  while ($row = $stmt->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT)) {

<span style="COLOR: rgb(0,128,0)">  ...

  缘由在于在查询执行后,PHP 的MYSQL、PDO_MYSQL 将查询后果悉数缓存到了客户端,也就是 PHP 执行地点机械上。如许假如我们要 SELECT * FROM LARGETABLE 查询的记载在 百万以上的时分 ,缓存的后果就会十分大,超出 PHP 运用内存。所认为了防止如许状况就需求封闭客户端的缓存。

  这里供应二个测试剧本,辨别为 MYSQL、PDO_MYSQL 封闭缓存后查询样例。点击下载:mysql_query

  以下是 PDO_MYSQL 在查询 ~100W 以及 ~200W (540M)数据后果(由于我的 PHP 内存运用设置了1G所以没挂:) )

  可以很分明的看出在缓存后果后占用内存惊人…,当我们处置万万数据的时分必挂。

  以下是 PDO_MYSQL 封闭缓存查询 ~200W 的数据后果。这下处置万万以及E级的数据的时分,对内存透露表现很淡定。

  PS:假如你要处置的数据就几十万,你照样调大点内存好了。比方 MYSQL:

  mysql_unbuffered_query() 的益处是有价值的:在 mysql_unbuffered_query() 返回的后果集之上不克不及运用 mysql_num_rows() 和 mysql_data_seek()。此外在向 MySQL 发送一条新的 SQL 查询之前,必需提取失落一切未缓存的 SQL 查询所发生的后果行。

发布:2007-03-31 14:58    编辑:泛普软件 · xiaona    [打印此页]    [关闭]
鹰潭OA
联系方式

成都公司:成都市成华区建设南路160号1层9号

重庆公司:重庆市江北区红旗河沟华创商务大厦18楼

咨询:400-8352-114

加微信,免费获取试用系统

QQ在线咨询

泛普鹰潭网站建设公司其他应用

鹰潭软件开发公司 鹰潭门禁系统 鹰潭物业管理软件 鹰潭仓库管理软件 鹰潭餐饮管理软件 鹰潭网站建设公司