mysql_unbuffered_query的_用mysql_unbuffered_query函数取大数据

昨天在做项目的时候,因为涉及到数据表结构的改动,需要进行大量数据的导入,那么如何高效的进行是我比较关注的。本文暂且从使用PHP脚本层面上来说,因为使用其他语言或其他方式也可以进行数据的重导。 在讨论这个问题的时候,前辈给我的意见就是单独做一个脚本,如果能拿python做更好,当然,python我还不是很会,所以拿php也能完成。既然这样,就采用最原生的方式来进行数据的重导。 整个过程中要先从一张表中取出全部数据,再进行数据的处理后导入到新的数据表中。而就我测试的那个数据库中的那张表里,数据量就已经上万了,如果直接全部取出必定会有性能上的问题。 他人给我的建议是,使用mysql_connect后用mysql_query执行sql(取大数据的情况如sele ct * from tbl)语句,理由是mysql_query不是返回的数据结果,因为后面用到mysql_fetch_assoc之类的函数,进行游标的移动来取得数据。并在sql执行前后分别使用了memory_get_usage来查看内存使用量。当然,执行后内存使用量比执行前大了,虽然使用了不多的内存,但对于只是测试数据库里的数据而言还行,当数据处理量很大的时候,php程序脚本可能会崩溃。为了确保重导真正线上数据库的数据万无一失,我还是查了一些相关资料。 最后了解到PHP中有个mysql_unbuffered_query这个函数,与mysql_query有点类似,手册上写了该函数不缓存的查询结果,它所带来的好处就是一不用缓存结果,二就是不必等待全部查询后进行操作,而是直接获取一条数据就可以操作。而mysql_query是查询出所有符合条件的结果并缓存后才能进行操作,这就让我怀疑之前建议的那个方法。 于是我同样用mysql_unbuffered_query查询同样一条sql语句,也同样对执行前后查看了内存使用量,结果前后内存使用量没有变,这就说明了内存并没有被拿来做查询数据缓存的相关事情。当然也可以使用以下方法来测试:

$link = mysql_con nect(‘localhost’,’root’,’root’);

mysql_select_ db(‘phpcms’);

$sql = “SEL ECT * FROM `phpcms_content`“;

//$result = mysql_unbuffered_query($sql,$link);

$result = mysql_query($sql,$link);

while ($row = mysql_fe tch_array($result, MYSQL_NUM)) {

printf (“ID: %s Name: %s”, $row[0], $row[1]);

}

mysql_data_seek($result,0);

echo “

“;

while ($row = mysql_fetch_array($result, MYSQL_NUM)) {

printf (“ID: %s Name: %s”, $row[0], $row[1]);

}

mysql_free_result($result);

你会发现使用mysql_query会输出两次,而mysql_unbuffered_query只输出一次,说明使用mysql_query查询结果必定被缓存了,而使用mysql_unbuffered_query则边进行查询边给出结果。 最后再说明,使用mysql_unbuffered_query的话,不能使用mysql_num_rows()和mysql_data_seek()这也正因为它的特性方式决定了这样。还有比较重要的一点,如果你只是单单获取大数据量使用这个函数可以,但是,如果你在取得大数据的时候,使用while($row = mysql_fetch_assoc($result))方式进行执行新的sql语句的话,会出错。手册上也写明了,在执行一条心的sql之前,要提取所有未缓存的sql查询所产生的行。所以只使用mysql_unbuffered_query取数据可以,但期间还要执行其他sql就不行了。 以上只是我对这个函数的初步认识,如果理解有误,也希望能指正交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何发布接口_Devops下的接口全生命周期管理与测试

什么是devops?随着时间的推移,devops的定义也在不断的演进。对于其定义可能出现千人千面,但从核心观点,整体业界还是保持着一致的认识。DevOps不是单一的技术或者工具,甚至不只是一个流程,而是包含应用设计…

lisp修改界址线属性_地籍与房产测量 A卷答案

地籍与房产测量 A卷答案一、单项选择题(共10个小题,每小题2分,共20分。)1、地籍测绘规范规定 界址点的精度分( C )A.一级 B.二级 C.三级 D.四级2、界址点的精度要求最高为 AA.5cm B.10cm C.15cm D.20cm3、城镇地区城区地籍图的比例尺一般采用( A )A. 1:1…

mysql获取数据库名_mysql获取数据库名

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户…

scala mysql连接池_Java与Scala的两种简易版连接池

Java版简易版连接池:import java.sql.Connection;import java.sql.DriverManager;import java.util.LinkedList;/*** 简易版的连接池*/public class ConnectionPool {//静态的Connectionprivate static LinkedListconnections;//加载驱动static {try {Class.forName…

查看mysql日志post_(转)MySQL 日志组提交

原文:https://jin-yang.github.io/post/mysql-group-commit.html组提交 (group commit) 是为了优化写日志时的刷磁盘问题,从最初只支持 InnoDB redo log 组提交,到 5.6 官方版本同时支持 redo log 和 binlog 组提交,大大提高了 MySQL 的事务处…

like语句太慢 sqlserver_SQLServer找出执行慢的SQL语句

SELECT(total_elapsed_time / execution_count)/1000 N平均时间ms,total_elapsed_time/1000 N总花费时间ms,total_worker_time/1000 N所用的CPU总时间ms,total_physical_reads N物理读取总次数,total_logical_reads/execution_count N每次逻辑读次数,total_logical_reads N逻辑…

mysql maxpreparedstmtcount_NodeJs Mysql Cant't create more than max_prepared_stmt_count statements

这阵子碰到一个数据库上的问题,一个刚上线不到一周的 NodeJs 接口服务里所有的查询全部都挂掉了,接口一直处于 pending 状态,看了下 pm2 的日志发现了报错:Cantt create more than max_prepared_stmt_count statements&#xff0c…

MySQL查询语句转postGRE语句_PostgreSQL DBA常用SQL查询语句

查看帮助命令DB# help --总的帮助DB# \h --SQL commands级的帮助DB# \? --psql commands级的帮助按列显示,类似MySQL的\GDB# \xExpanded display is on.查看DB安装目录(最好root用户执行)find / -name initdb查看有多少DB实例在运行(最好root用户执行)find / -name…

苹果cms10自适应模板_哪里有苹果cms10自适应模板?

1,苹果CMSv10大图轮播高端大气自适应视频网站模板源码苹果cms10自适应模板下载地址:https://www.mytheme.cn/maccms/54.html第一款大图宽屏的海报轮播幻灯样式,宽屏模板支持DIY扩展自适应影视模板苹果cms10自适应模板苹果cms10自适应模板2&am…

python实现进程通信_python进程间的通讯实现

1:进程间通讯的方法:apply_async()非阻塞式通讯 apply()阻塞式通讯2:使用Queue实现对Process创建的进程间通讯,Queue本身是一个消息队列程序,Queue常用方法:Queue.qsize():返回当前消息队列的消息数量Q…

yum mysql 版本低_mysql小版本升级(yum方式)

5.7.21 --> 5.7.231. 数据库备份(略)2. mysql配置文件备份cp /etc/my.cnf /etc/my.cnf.bak3. yum配置mysql源3.1安装mysql57-community-release-el6-8.noarch.rpm之类的东西rpm -ivh mysql57-community-release-el6-8.noarch.rpm3.2 查看mysql的repovim /etc/yum.repos…

mysql definer设置为root_mysql如何修改所有的definer

mysql中的definer是什么,有什么作用?我们在mysql创建view、trigger、function、procedure、event时都会定义一个Definer‘xxx’,类似如下:CREATEALGORITHMUNDEFINEDDEFINER root% SQL SECURITY DEFINERVIEW v_ questions ASSELECTq.idASid,q.…

vscode php formatter mac配置_Mac上配置Vs code时,遇到的几个“坑”!

在写一些简单的程序时,你喜欢用什么编译器呢?之前我一直用的是sublime,它打开的速度快,占用的内存小。但是有个麻烦的地方,配置的时候要花一些时间,如果你的网不好还时不时给你来个timeout。最近在Youtube上…

java 创建mysql表_MySQL 创建数据表

MySQL 创建数据表创建MySQL数据表需要以下信息:表名表字段名定义每个表字段语法以下为创建MySQL数据表的SQL通用语法:CREATE TABLE table_name (column_name column_type);以下例子中我们将在 W3CSCHOOL 数据库中创建数据表w3cschool_tbl:tut…

python内置对象是什么_#【Python】【基础知识】【内置对象常用方法】

数字的常用方法:>>> dir(int)[‘__abs__‘, ‘__add__‘, ‘__and__‘, ‘__bool__‘, ‘__ceil__‘, ‘__class__‘, ‘__delattr__‘, ‘__dir__‘, ‘__divmod__‘, ‘__doc__‘, ‘__eq__‘, ‘__float__‘, ‘__floor__‘, ‘__floordiv__‘, ‘__for…

模为2的逆元是什么_两种求模m逆元的方法

在a|b(a能整除b)的前提下&#xff0c;计算(b/a)mod m的时候转化为 计算(b*x)mod m ; 这时的x就是a的逆元(a模m的逆元)&#xff1b;此时x满足 (a*x mod m 1)&#xff1b; 这个x的求法有一下两种&#xff1a;1)扩展欧几里得算法求解 a*xm*y1; 因为 a*x mod m 1 <> a…

java值栈_Struts2 中的值栈是什么?

7.1值栈7.1.1值栈是什么简单的说&#xff1a;值栈是对应每一个请求对象的轻量级的内存数据中心。Struts2中一个很激动人心的特性就是引入了值栈&#xff0c;在这里统一管理着数据&#xff0c;供Action、Result、Interceptor等Struts2的其他部分使用&#xff0c;这样一来&#x…

java try的用法_Java中try、catch的使用方法

Java中有两种处理异常的方式&#xff0c;分别是用throws抛出异常、用try、catch捕获异常。try-catch在Javatry-catch语句的语法格式&#xff1a;try{//代码块}catch(Exception1 e){//抛出异常后所要进行的操作}当try语句当中捕获到异常时&#xff0c;会将异常抛出到catch语句中…

java android上传文件_Java-Android-如何将txt文件上传到网站?

我想将txt文件上传到网站,我承认我没有对其进行任何详细的研究,但是我看了一些示例,并希望就我是否朝着正确的方向提出更多的经验性意见. .这是我到目前为止的内容&#xff1a;DefaultHttpClient httpClient new DefaultHttpClient();HttpContext localContext new BasicHttp…

java授查 非授查异常_java检查异常与非检查异常

Java的可检测异常和非检测异常泾渭分明。可检测异常经编译器验证&#xff0c;对于声明抛出异常的任何方法&#xff0c;编译器将强制执行处理或声明规则。非检测异常不遵循处理或声明规则。在产生此类异常时&#xff0c;不一定非要采取任何适当操作&#xff0c;编译器不会检查是…