我有一个场景,我运行一个cron并从远程数据库中提取数据并插入本地数据库。
我的专栏中定义了一个唯一键。从远程数据库的数据,我需要绕过本地系统中存在的记录,并插入新的记录。
我无法编写选择查询并每次检查200条记录。如果有任何动态方法,请建议我
答案 0 :(得分:0)
您可以使用INSERT IGNORE
忽略所有重复项。
答案 1 :(得分:0)
我在INSERT IGNORE上运行了一些基准测试。
删除LOCAL表并且不使用IGNORE会有效甚至更高效。
总时间:使用和清空`LOCAL`表
0.4357 - 0.4506秒
INSERT INTO `LOCAL` SELECT * FROM `REMOTE` WHERE 1
899 row inserted Query took 0.4357 - 0.4506 sec
使用IGNORE (899行)
总时间:0.4090 - 0.4788秒
INSERT IGNORE INTO `LOCAL` SELECT * FROM `REMOTE` WHERE 1
1 row inserted. Inserted Query took 0.4090 - 0.4788 sec
然后我尝试了这个例程
总时间:0.0006 - 0.0010
$results = mysqli_query("SELECT MAX(`id`) FROM `LOCAL` WHERE 1");
$row = mysqli_fetch_array($results, MYSQL_NUM);
$max = $row[0];
@mysqli_query("INSERT INTO `LOCAL` SELECT * FROM `id` FROM `REMOTE` WHERE `id` > $max");
SELECT MAX和INSERT WHERE`id`> $ max在0.0003 - 0.0005秒之间,(插入1行。查询耗时0.0003 - 0.0005秒)
在运行此例程之前,我会删除本地表中的最后一行。