好的,我有一个名为entries
的MySQL表,其中包含name VARCHAR(255) NOT NULL
和address VARCHAR(255)
该表有大约一百万套数据。
对于每组数据,name都有一个值,例如: "约翰"地址为NULL。
例如:
+------+---------+
| name | address |
+------+---------+
| john | NULL |
+------+---------+
| jake | NULL |
+------+---------+
| zach | NULL |
+------+---------+
我收到了一个CSV文件,其中包含name:address
格式的名称及其对应的地址。
就像我说的那样,entries
表有近百万个条目,因此csv文件大约有800,000行。
我想在csv中取每行,并插入名称相同的地址:
UPDATE `entries` SET `address` = <address from csv> WHERE `name` = <name from csv>;
我制作了一个Python脚本来打开逐行读取的csv文件。对于每一行,它会将名称和地址存储在单独的变量中。然后它会执行上面的查询,但是将数据插入列中需要很长时间。
无论如何我可以在MySQL中做到这一点,如果是这样,最快的方法是什么?
感谢。
答案 0 :(得分:1)
您可以使用mysql LOAD DATA INFILE将CSV文件导入单独的表中,然后根据类似的列名使用JOIN语句更新条目表。
E.g: 更新条目a.name = b.name上的内连接new_table b设置a.address = b.address;
此处从CSV文件中导入new_table ..
不要忘记在名称列的两个表上添加索引,以便它快速...
答案 1 :(得分:1)
创建table1和table2
for ($i=count($array); i>0; $i--;)
{
if(condition)
{DO SOMETHING like print the element in a decreasing manner}
if(enter ending iteration condition here after xth element) break;
}
同样将file2改为table2
继续
答案 2 :(得分:0)
确实使用批量查询会更快。您可以使用for循环扫描CSV文件并创建执行大批量查询的字符串。
例如(伪代码):
String Query ="UPDATE entries SET Value = ( CASE ";
For (begin of file to end)
Name = NameFromFile;
Value = ValueFromFile;
Query += "WHEN NameField = ";
Query += Name + " THEN " +Value;
End
Query+= " )";
当然,连接时需要将这些值转换为字符串。我不会说这是最快的,但肯定更快。
抱歉格式不佳,我在手机上。