每周我需要从原始CSV文件中加载50K~200K行记录到我的系统。
目前我的解决方案是将CVS加载到临时表(在进程后将其清空),然后运行我的存储过程以将数据操作到我系统中的不同相关表。如果已存在记录,则会运行更新查询(CSV中的80%记录已在我的系统表中),如果不存在则插入记录。
我现在面临的问题是表格增长到几百万条记录,约。每张桌子5~6百万。 " 选择存在"看起来也很慢,之后我批量改为左连接表也很慢。 即使我刚刚加载了5K记录,也可能需要几个小时才能完成存储过程。
在比较表以决定插入/更新记录时,处理大量记录的任何好的和更快的解决方案?
谢谢!
杰克
答案 0 :(得分:0)
执行以下过程以减少您的时间
首先尝试更新记录并检查受影响的行数(如果受影响的行数= 0)然后插入记录。
但是确保每次你需要修改modified_Date如果表中不存在modified_Date那么你需要添加它,因为如果新旧记录中的所有数据都是相同的那么它只会因为没有修改而创建新的查询在表记录中,它将返回0。
答案 1 :(得分:0)
MySQL的慢响应几乎总是错误索引或不正确使用它的问题。
如果使用密钥或/和索引正确,则INSERT ... ON DUPLICATE KEY UPDATE ...应该有效。
尝试仅对现有索引/键起作用。使用EXPLAIN SELECT检查语句。
恕我直言,您的基于tmp表的预处理是可以的。