我有一个大约 200 MB/1 轧机行的 CSV 文件,每晚都会更新。我需要这个文件中的值在 MySQL 表中可用。
我通过使用LOAD DATA INFILE filepath REPLACE INTO TABLE tablename
. 这很快,它保留了我的索引。问题是不再在 csv 中的值不会被删除。
另一个尝试是到TRUNCATE
桌子上,然后是LOAD DATA INFILE filepath INSERT INTO TABLE tablename
之后。这似乎快了大约 25%。但是通过这样做,我在索引被禁用(?)或停止工作时遇到了很多麻烦。我已经阅读 MySQL 文档和 SO 好几天了,但我无法弄清楚。
我的下一次尝试与第一次类似。我添加了一列“更新”,并update=0
在REPLACE INTO
使用 a之前将每一行设置为SET update=1
,然后使用 删除所有剩余的行update=0
。这是我目前的方法。
我的问题是:哪种方法被认为更适合用来自 csv 的信息完全替换表,但保留/刷新索引。我很感激有关该主题的任何建议。
我正在使用 MyISAM 引擎。
小智 6
在填充数据时,您可能会遇到许多问题。数据大小本身并不大,但更不方便……您可以选择任何填充它的机制,包括常规选择。
正确的方法是做它与TRUNCATE
后面的LOAD
。如果您在索引方面遇到问题,那么您应该与 MySQL 人员一起解决这个问题,这是一个错误,它应该可以工作。
如果您暂时需要解决此问题,那么我建议您向表中添加一列,该列对于每个 LOAD 周期都是唯一的。约会对象可能是一个不错的选择。您已经选择了一个“更新”列,这是一个很好的列使用....但是,不是每次将数据更改回 0,只需为每次加载增加它,或者使用与日期匹配的数字,例如20140110
例如。然后,在加载数据后,您可以:
DELETE from TABLE where update <> 20140110
Run Code Online (Sandbox Code Playgroud)