Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17195
  • 博文数量: 22
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 240
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-18 10:33
文章分类
文章存档

2015年(22)

我的朋友

分类: Mysql/postgreSQL

2015-02-28 19:24:24

    这部分解释了如何加快数据操纵语言(DML)语句,INSERT,UPDATE和DELETE。传统的OLTP应用程序和现代Web应用程序通常做很多小DML操作,数据分析和报告应用程序通常运行 DML操作影响许多行一次,这里主要考虑的是数据大量的I / O写和保持索引向上的更新。对于插入和更新大量数据(业内称为ETL称,对于“抽取,转换,加载”),有时候你使用其他SQL语句或外部命令,模仿INSERT,UPDATE,和DELETE语句的影响

8.2.2.1. Speed of INSERT Statements(INSERT语句的速度)

    为了优化插入速度,结合许多小操作成一个大的操作。理想情况下,你做单一连接,一次的数据发送许多新行,并延缓所有的索引更新和一致性检查,直到最后一刻。所需的插入行的时间由以下因素的影响,其中的数字表示大致的比例确定:

  • 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语句有多个值列出同时插入几行。这是相当快(在 某些情况下快许多倍)比使用单独的单行INSERT语句。如果要添加数据到非空表,可以调整bulk_insert_buffer_size[493]变量,使数据插入更快。详见 Section 5.1.4, “Server System Variables”。

  • 当从一个文本文件加载一个表时,使用LOAD DATA INFILE。这通常比使用INSERT语句快20倍。详见 Section 13.2.6, “LOAD DATA INFILE Syntax”。

  • 采取的这一事实列有默认值的优势。只有当插入的值不同于默认值明确地插入值。这降低了分析该MySQL必须做的并提高插入速度。

  • InnoDB表具体技巧详见  Section 8.5.4, “Bulk Data Loading for InnoDB Tables”。

  • MyIASM表具体技巧详见 Section 8.6.2, “Bulk Data Loading for MyISAM Tables”

8.2.2.2. Speed of UPDATE Statements(UPDATE语句的速度

    一个UPDATE语句进行优化像一个写的额外开销SELECT查询。写的速度取决于数据被更新的数量和已更新的索引数。未改变索引没有得到更新。

    另一种方式来获得快速更新是后来推迟更新,然后做在一行许多更新。执行多次更新在一起比做一次快得多如果你锁定表。对于MyISAM表使用动态行格式,更新的行为更长的总长度可以分割行。如果你经常这样做,这是非常重要的是使用OPTIMIZE TABLE偶尔。


8.2.2.3. Speed of DELETE Statements(DELETE语句的速度

    删除一个MyISAM表的各个行所需要的时间是完全成比例的索引数。为了更快速地删除行,你可以通过增加key_buffer_size[520]系统变量增加索引缓存的大小。详见 Section 8.11.2, “Tuning Server Parameters”。

    从MyISAM表中删除所有行,TRUNCATE TABLE tbl_name比DELETE FROM tbl_name。截断操作不是安全事务;尝试之一活动事务或活动表锁的过程中发生错误时。详见 Section 13.1.27, “TRUNCATE TABLE Syntax”。


阅读(78) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~