8.2.2 Optimizing DML Statements 优化DML 语句:

8.2.2 Optimizing DML Statements 优化DML 语句:

8.2.2.1 Speed of INSERT Statements
8.2.2.2 Speed of UPDATE Statements
8.2.2.3 Speed of DELETE Statements

这个章节显示 如何加速DML操作,INSERT,UPDATE和DELETE。

传统的OLTP 应用和现代的web应用通常是一些小的DML操作,

并发值至关重要的。数据分析和报表应用典型的运行DML操作一次影响很多记录,

主要的考虑是I/O 写大量的数据和保持索引的更新。对于插入和更新大量的数据

( 比如ETL, for “extract-transform-load”),

有时候你使用其他的SQL语句或者外部命令,模拟INSERT,UPDATE和DELETE 语句。

8.2.2.1 Speed of INSERT Statements

要优化插入速度,将小的操作合成一个小的大操作。在理想状况下,

你再一个单独的连接上, 一次发送很多数据, delay所有的索引更新和一致性检查直到结束。

插入一行需要的时间是有下面的因素决定, number 表示相应的比例:

Connecting: (3)

Sending query to server: (2)

Parsing query: (2)

Inserting row: (1 × size of row)

Inserting indexes: (1 × number of indexes)

Closing: (1)

这个不考虑打开表的初始开销, 为每一个并发查询运行一次。

表的大小降低了索引的插入通过log N, 假设B树索引:

你可以使用以下的方法来加快插入:

如果你在同一时间插入多行从同一个客户端,使用INSERT 语句带多个VALUES 列表

来一次插入多行。

这个认为是快速的(快很多倍在有些情况下) 相比使用单独的行插入语句。

如果你增加数据到一个非空的表,你可以调优bulk_insert_buffer_size 变量来让数据插入变的更快。

当从文本文件加载表, 使用LOAD DATA 文件, 这个通常是20倍速度的相比使用INSERT 语句。

利用列有默认值的事实,只有当插入的值于默认的值不同的时候才插入值,

这个降低了SQL的解析,来改善性能。

原文地址:https://www.cnblogs.com/hzcya1995/p/13351275.html