PHP/MYSQL 查询大数据/遍历表
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 查询所发生的后果行。
- 1地方生活优惠电子商务网站需求分析
- 2玩具租赁商城系统需求3
- 32014年玩具租赁市场达8亿,如何抓住这市场良机?
- 4P2P网贷的营销战略特点
- 5Zend2.0的MVC完整过程。
- 6常见的 Android 新手误区
- 7企业网站的优化现状
- 8企业网站排名要打造内链
- 9当前电子商务的主流贸易形态
- 10P2P网贷的特点
- 11PHP性能优化大全
- 12家居家装类网站融入社区风格方案
- 13介绍如何使用你的JavaScript
- 14如何让企业网站发挥到机极致
- 15企业做网站有没有用?
- 16关于HTML5当时状况的若干关键
- 17PHP 安全措施
- 18APC(Alternative PHP Cache)是一个PHP缓存
- 19PHP与XML联手进行网站编程
- 20全站内置SEO优化机制
- 21评估企业站做的好坏的方法
- 22企业为什么偏爱要求资深的网站维护单位做网站呢?
- 23魅妆社区项目开发文档
- 24百度算法更新,为什么站被降权?
- 25ecshop中jQuery冲突解决
- 26RESTful的实现
- 27PhoneGap新手总是需要一些基础问题的解答
- 28404过错跳转到一个页面,咱们取名叫:missing404.php
- 29网站优化的注意事项
- 30ecshop的数据字典
成都公司:成都市成华区建设南路160号1层9号
重庆公司:重庆市江北区红旗河沟华创商务大厦18楼