关于MySQL的load data infile

本文探讨了MySQL的LOAD DATA INFILE命令为何比INSERT快,主要原因是批量处理和减少索引更新。同时,通过测试展示了LOAD DATA INFILE在处理重复数据时的行为,以及使用IGNORE选项的影响。文章还提到了优化LOAD DATA的方式,如ALTER TABLE ... DISABLE KEYS和INSERT DELAYED。
摘要由CSDN通过智能技术生成

最近经常使用mysql的load data infile导入数据。查阅了相关资料记录下:

为什么load data infile 快

关于为什么Load data 会更快,查阅资料如下:

较短的SQL 语句比较长的SQL 语句要快,因为它们涉及服务器方的分析较少,而且还因为将它们通过网络从客户机发送到服务器更快。这些因素中有一些似乎微不足道(特别是最后一个因素),但如果要装载大量的数据,即使是很小的因素也会产生很大的不同结果。我们可以利用上述的一般原理推导出几个关于如何最快地装载数据的实际结论:

  LOAD DATA(包括其所有形式)比INSERT 效率高,因为其成批装载行。索引刷新较少,并且服务器只需分析和解释一条语句而不是几条语句。

  LOAD DATA 比LOAD DATA LOCAL 效率更高。利用LOAD DATA,文件必须定位在服务器上,而且必须具有FILE 权限,但服务器可从磁盘直接读取文件。利用LOAD DATA LOCAL,客户机读取文件并将其通过网络发送给服务器,这样做很慢。

另外就是insert 的话,每运行一句,就更新一次索引,load 的话,全部执行完了再更新一次索引 (参考自http://www.debugease.com/mysql/281384.html

究其根源主要是MySQL内部对于load 和 insert的处理机制不同.
Load的处理机制是:在执行load之前,会关掉索引,当load全部执行完成后,再重新创建索引.
Insert的处理机制是:每插入一条则更新一次数据库,更新一次索引.
补充:另外,load与insert的不同还体现在load省去了sql语句解析,sql引擎处理,而是直接生成文件数据块,所以会比Insert快很多.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值