主要涉及到三种操作:INSERT, UPDATE
和DELETE
尽量将多次小操作合并为,这样子,就只会产生一次连接并且数据一次性发给服务器, 而且,也只有在操作最后才会进行索引更新和一致性检查。
根据预估,通常来讲,一次插入操作所耗费的时间比例如下:
因此,你可以采取以下方式来优化插入操作:
INSERT
语句一次性插入多行的功能,这样子速度会远高于单行插入,并且,调整bulk_insert_buffer_size
参数,也可以使得插入操作更快。LOAD DATA
命令,该命令通常比INSERT
操作要快20倍。尽量利用那些含有默认值的列,这样子可以减少Mysql的解析和插入开销。
InnoDB
tables.See Section 8.6.2, “Bulk Data Loading for MyISAM Tables” for tips specific to MyISAM
tables.
UPDATE
语句的优化类似于SELECT
,只是多了一个写入操作;对于写入操作,和INSERT
类似,一次性进行多行更新速度将比单行更新快很多。
注:官方文档对于DELETE操作只涉及到了MyISAM表,对于InnoDB部分应该是通用的。
对于MyISAM
表,删除行操作的开销通常来讲主要由需要更改的索引数量来决定,为了加快删除速度,可以增大key_buffer_size
系统变量。
如果需要删除表中的所有行,那么使用TRUNCATE
来代替DELETE FROM
操作,TRUNCATE
不是事务安全的,如果碰到其他事务或者表锁,那么会跑出错误,所以速度会比DELETE FROM
快很多。
原文:https://www.cnblogs.com/seancheer/p/11338676.html