2015-07-11 46 views
-1

我使用下面的查詢來更新我的表如何做LOAD DATA LOCAL INFILE更新,而無需使用臨時表

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刪除整個行,放是一個新的,這不完全是我需要的更新。 不幸的是,由於速度問題,我不能使用臨時表。 在這種情況下,是否有無法實現ON DUPLICATE UPDATE的功能?

回答

1

這是太長的評論。

如果你需要做實時更新到數據庫表中,那麼SQL有這個漂亮的說法,叫做UPDATE。嚴格來說,如果速度是主要問題,則應該更新明確並且不通過文件傳遞值。

你的應用程序已經採取了將數據放入一個文件(大概)等待寫入文件完成的時間命中。額外的時間將數據加載到update的表中只是「創建文件」過程的一部分。

可能有加快更新的方法。例如,在加載到臨時文件後,在toupdate(product_id)上創建一個索引。這應該加快形式的查詢:

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