在线一键免费生成网页网站,临沂做网站推广的公司,网络营销概念及理解,黑群晖wordpress建站昨天在做项目的时候#xff0c;因为涉及到数据表结构的改动#xff0c;需要进行大量数据的导入#xff0c;那么如何高效的进行是我比较关注的。本文暂且从使用PHP脚本层面上来说#xff0c;因为使用其他语言或其他方式也可以进行数据的重导。 在讨论这个问题的时候#xf…昨天在做项目的时候因为涉及到数据表结构的改动需要进行大量数据的导入那么如何高效的进行是我比较关注的。本文暂且从使用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就不行了。 以上只是我对这个函数的初步认识如果理解有误也希望能指正交流。