总结
豆包 AI 助手文章总结

mysql表列复制,mysql连接时间跟内存控制

php中文网
发布: 2016-06-13 12:46:23
原创
1233人浏览过
mysql表列复制,mysql连接时间和内存控制。
有两个表临时表temp_t,和正表table1,都是MyISAM,分别有28W条左右的记录。
cron定时每分钟从网络上获取一些信息,先存储到temp_t(频繁写入),
然后cron定时每10分钟从temp_t复制信息到正表table1(频繁读取,每10分钟写一次)。

temp_t字段 id(auto_increment),title(varchar(200)),content(varchar(500)),date(DATETIME), mykey(tinyint(1) Default 1, 这个来判别是否已经复制到正表,复制过后UPDATE为2)

table1字段 id(没有auto_increment),title(varchar(200)),content(varchar(500)),date(DATETIME)


28W记录,每个数据表大概有300MB,每次更新差不多要2K-3K条记录。
如果直接复制的话,MYSQL连接时间过长,导致MYSQL性能下降table1会出现类似于锁表的现象,查询table1的时间明显加长
require dirname(__FILE__) . '/../connection.php';<br />
mysql_select_db("news",$connextion);<br />
mysql_query("SET NAMES utf8");<br />
$query = mysql_query("SELECT * FROM temp_t where mykey = '1'");<br />
while($rows = mysql_fetch_array($query)){<br />
	mysql_query("UPDATE temp_t SET mykey='2' WHERE id='".mysql_real_escape_string($rows['id'])."'");<br />
	mysql_query("INSERT INTO table1 (id,title,content,date) values ('".mysql_real_escape_string($rows['id'])."','".mysql_real_escape_string($rows['title'])."','".mysql_real_escape_string($rows['content'])."','".mysql_real_escape_string($rows['date'])."'");<br />
}<br />
mysql_close($connextion);
登录后复制



于是想先把记录从temp_t里的数据先读出来,存为一个json数组,然后再复制数据到table1,但是有时会遇到Cannot allocate memory,然后导致整个服务器崩溃(是不是这个json数组太大,占了巨量的内存)。PS:已经在php.ini里将memory limit加到64M了(但总觉得治标不治本,这么一个复制过程,不需要那么多内存,关键还是代码不合理)。

require dirname(__FILE__) . '/../connection.php';<br />
mysql_select_db("news",$connextion);<br />
mysql_query("SET NAMES utf8");<br />
$query = mysql_query("SELECT * FROM temp_t where mykey = '1'");<br />
$jon = array();<br />
while($rows = mysql_fetch_array($query)){<br />
	$jon['a'] = $rows['id'];<br />
	$jon['b'] = $rows['title'];<br />
	$jon['c'] = $rows['content'];<br />
	$jon['d'] = $rows['date'];<br />
	$pjon .= json_encode($jon).',';<br />
}<br />
mysql_close($connextion);<br />
$njso = json_decode('['.substr($pjon,0,-1).']');<br />
foreach($njso as $nx){	<br />
	if($nx->a){<br />
		require dirname(__FILE__) . '/../connection.php';<br />
		mysql_select_db("news",$connextion);<br />
		mysql_query("SET NAMES utf8");<br />
		mysql_query("UPDATE temp_t SET mykey='2' WHERE id='".mysql_real_escape_string($nx->a)."'");<br />
		mysql_query("INSERT INTO table1 (id,title,content,date) values ('".mysql_real_escape_string($nx->a)."','".mysql_real_escape_string($nx->b)."','".mysql_real_escape_string($nx->c)."','".mysql_real_escape_string($nx->d)."'");<br />
		mysql_close($connextion);<br />
	}<br />
}
登录后复制


所以求助大虾们,有没有更节省的代码用来复制表的信息?要求mysql连接时间短,内存消耗又少?谢谢大家。
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号