如何在不使用临时表的情况下使用LOAD DATA LOCAL INFILE进行更新

时间:2015-07-11 10:49:59

标签: mysql bash shell

我正在使用以下查询来更新表格中的字段

body {
  /* Better Font Rendering */
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

但是,LOAD DATA LOCAL INFILE '$_file' REPLACE INTO TABLE test_db.productsinfo FIELDS TERMINATED BY '\,' OPTIONALLY ENCLOSED BY '\"' IGNORE 1 LINES (\`products_id\`, \`products_source\`, \`quantity\`, \`cost\ ) 会删除整行并添加一个新行,这不是我需要的更新类型。 不幸的是,由于速度问题我无法使用临时表。 在这种情况下,有没有实现REPLACE的功能?

1 个答案:

答案 0 :(得分:1)

评论太长了。

如果您需要对数据库中的表进行实时更新,那么SQL会有一个名为UPDATE的漂亮语句。严肃地说,如果速度是主要考虑因素,那么你应该明确地更新 ,而不是通过文件传递值。

您的应用程序已花费时间将数据放入文件中并且(可能)等待对文件的写入完成。将数据加载到update表中的额外时间只是“创建文件”过程的一部分。

可能有办法加快更新速度。例如,在加载到临时文件后,在toupdate(product_id)上创建索引。这应该加快对表单的查询:

update products p join
       toupdate
       on p.product_id = toupdate.product_id
    . . .