INSERT优化
插入行所需的时间由以下因素决定,其中数字表示近似比例:
- 连接:(3)
- 向服务器发送查询:(2)
- 解析查询:(2)
- 插入行:(1×行大小)
- 插入索引:(1×索引数)
- 断开连接:(1)
您可以使用以下方法来加快插入速度:
-
如果要同时从同一客户端插入许多行,请使用
INSERT
具有多个VALUES
列表的语句一次插入几行。这比使用单独的单行INSERT
语句要快得多(某些情况下要快很多倍)。 -
从文本文件加载表格时,请使用
LOAD DATA
。这通常比使用INSERT
语句快20倍 。 -
利用列的默认值。仅当要插入的值与默认值不同时才明确插入值。这减少了MySQL必须执行的解析,并提高了插入速度。
-
索引数量越少,插入数据速度越快。要在查询性能和插入性能之间平衡好,索引的数量至关重要。
UPDATE优化
写入速度取决于要更新的数据量和要更新的索引数。不会更新未更改的索引。
获取快速更新的另一种方法是延迟更新,然后在以后连续执行多个更新。如果锁定表,一起执行多个更新比一次执行一个更新快得多。
对于使用动态行格式(如text,varchar等)的MyISAM
表,将行更新为更长的总长度可能会拆分该行。如果您经常这样做,那么偶尔使用OPTIMIZE TABLE
非常重要 。
DELETE优化
要从MyISAM表中删除所有行,TRUNCATE table tbl_name 比 delete from tbl_name快。Truncate操作不是事务安全的;在活动事务或活动表锁过程中尝试执行某个操作时会报错。