一、优化INSERT语句
为了优化插入速度,将许多小型操作组合成一个大的操作。理想情况下,您进行单个连接,一次发送许多新行的数据,并延迟所有索引更新和一致性检查,直到最后。
插入行所需的时间由以下因素确定,其中数字表示大致比例:
- 连接:(3)
- 向服务器发送查询:(2)
- 解析查询:(2)
- 插入行:(1×行大小)
- 插入索引:(1×索引数)
- 结束:(1)
假设B树索引, 表的大小减慢了日志中插入索引的速度。
您可以使用以下方法加快插入:
- 如果同时从同一客户端插入多行,则使用INSERT带有多个VALUES列表的语句一次插入多行。这比使用单独的单行语句要快得多(在某些情况下快INSERT多倍)。如果要将数据添加到非空表,则可以调整bulk_insert_buffer_size变量以使数据插入更快。
- 从文本文件加载表时,请使用LOAD DATA INFILE,这通常比使用INSERT语句快20倍。
- 利用列具有默认值的事实,仅当要插入的值与默认值不同时才显式插入值,这将减少MySQL必须执行的解析,并提高插入速度。
二、优化UPDATE语句
UPDATE语句优化,就像SELECT查询一样 ,具有额外的写入开销。写入速度取决于更新的数据量和更新的索引数量,未更改的索引不更新。获取快速更新的另一种方法是延迟更新,然后在一行中执行许多更新,一起执行多个更新要比一次锁定表更快。
三、优化DELETE语句
删除MyISAM表中单个行所需的时间与索引数量成正比,要更快地删除行,您可以通过增加key_buffer_size系统变量来增加key缓存的大小 。