数据量大了之后想对一张表的数据进行插入/更新就会非常慢!目前环境是一张主表数据量在一亿的样子,之前做插入更新处理是用的KETTLE抽取工具,然而这张表是四个字段的联合主键,这样判断起来效率就会非常低,现在跑任务直接会卡死不动。网上找了一些类似的解决方案:建一张新表B,跟原表A的表结构相同,把每次导入的数据全部导入B表中,然后用左外连接把重复的数据删除(DELETE FROM A WHERE A.ID IN(SELECT B.ID FROM B LEFT JOIN A ON B.ID = A.ID) ),然后执行(INSERT INTO A SELECT * FROM B),最后删除B表的数据,网上说测试发现不到一分钟就可以在一百万数据中完成十万数据的导入。这的确是一种方法,但是如果是联合主键或者主表的数据量非常大基本就废了,经测试100W的数据插入更新10W数据,更新的这张表是四个字段的联合主键,所需时间在45分钟,如果数据量继续增大,那么显然这种方式是肯定不能满足需求的。最后解决方式是通过MERGE INTO的方式解决,示例如下:
--原始表
CREATE TABLE PRODUC