0

1 有 2 个表,temp_table 和表,两者都是MyISAM.

temp_table(频繁写入,每分钟运行一次cron作业插入数据)

id(auto_increment),title(varchar(200)),content(varchar(500)),date(DATETIME), mykey(tinyint(1) Default 1)

表(经常阅读,用于自定义搜索,每 10 分钟使用 cron 作业从 temp_table 更新)

id(int(11)),title(varchar(200)),content(varchar(500)),date(DATETIME), hour(smallint(2))

现在,数据约为 300MB/表,每次更新将传输2,000-3,000 行

require dirname(__FILE__) . '/../connection.php';
mysql_select_db("news",$connextion);
mysql_query("SET NAMES utf8");
$query = mysql_query("INSERT INTO table (hour,id,title,content,date) values '".date('H')."',SELECT id, title,content,date from temp_table where mykey = '1'");
$query = mysql_query("UPDATE temp_table SET mykey='2' WHERE mykey = '1'");
//if data has transfer, update mykey='2' for a mark.
mysql_close($connextion);

但没什么INSERT INTO table,如何编写正确的 mysql 查询,这种方式更有效吗?我需要更少的 mysql 连接时间和更低的内存使用量。谢谢。

PS: temp_table 有检查title是否重复的规则,所以 temp_table 不能删除,如果 date 是 1 个月前,table 会每天清空。

4

1 回答 1

0

尝试使用$query = mysql_query("INSERT INTO table (hour,id,title,content,date) values ('".date('H')."',SELECT id, title,content,date from temp_table where mykey = '1'")) or die('error while inserting');

于 2013-05-19T16:16:49.993 回答