zoukankan      html  css  js  c++  java
  • MySQL 提高Insert性能

    插入一个记录需要的时间由下列因素组成,其中的数字表示大约比例:

    • 连接:(3)
    • 发送查询给服务器:(2)
    • 分析查询:(2)
    • 插入记录:(1x记录大小)
    • 插入索引:(1x索引)
    • 关闭:(1)

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

    表的大小以logN (B树)的速度减慢索引的插入。

    加快插入的一些方法:

    • 如果同时从同一个客户端插入很多行,使用含多个VALUE的INSERT语句同时插入几行。这比使用单行INSERT语句快(在某些情况下快几倍)。如果你正向一个非空表添加数据,可以调节bulk_insert_buffer_size变量,使数据插入更快。
    • 如果你从不同的客户端插入很多行,能通过INSERT DELAYED语句加快速度。
    • 用MyISAM,如果在表中没有删除的行,能在SELECT语句正在运行的同时插入行。
    • 当从一个文本文件装载一个表时,使用LOAD DATA INFILE。这通常比使用很多INSERT语句快20倍。
    • 当表有很多索引时,有可能要多做些工作使得LOAD DATA INFILE更快些。使用下列过程:
    有选择地用CREATE TABLE创建表。 
    执行FLUSH TABLES语句或命令mysqladmin flush-tables。 
    使用myisamchk --keys-used=0 -rq /path/to/db/tbl_name。这将从表中取消所有索引的使用。 
    用LOAD DATA INFILE把数据插入到表中,因为不更新任何索引,因此很快。 
    如果只想在以后读取表,使用myisampack压缩它。参见15.1.3.3节,“压缩表特性”。 
    用myisamchk -r -q /path/to/db/tbl_name重新创建索引。这将在写入磁盘前在内存中创建索引树,并且它更快,因为避免了大量磁盘搜索。结果索引树也被完美地平衡。 
    执行FLUSH TABLES语句或mysqladmin flush-tables命令。
    • 锁定表可以加速用多个语句执行的INSERT操作

    这样性能会提高,因为索引缓存区仅在所有INSERT语句完成后刷新到磁盘上一次。一般有多少INSERT语句即有多少索引缓存区刷新。如果能用一个语句插入所有的行,就不需要锁定。对于事务表,应使用BEGIN和COMMIT代替LOCK TABLES来加快插入。

    INSERT、UPDATE和DELETE操作在MySQL中是很快的,通过为在一行中多于大约5次连续不断地插入或更新的操作加锁,可以获得更好的整体性能。如果在一行中进行多次插入,可以执行LOCK TABLES,随后立即执行UNLOCK TABLES(大约每1000行)以允许其它的线程访问表。这也会获得好的性能。

    --锁表
    LOCK TABLES `order` WRITE;
    --禁用键
    ALTER TABLE `order` DISABLE KEYS ;
    --插入数据
    INSERT INTO `order` VALUES (1,11,'UPDATED');
    INSERT INTO `order` VALUES (2,11,'UPDATED');
    --启用键
    ALTER TABLE `order` ENABLE KEYS;

    --解锁表
    UNLOCK TABLES;
    •  为了对LOAD DATA INFILE和INSERT在MyISAM表得到更快的速度,通过增加key_buffer_size系统变量来扩大 键高速缓冲区
  • 相关阅读:
    623. Add One Row to Tree 将一行添加到树中
    771. Jewels and Stones 珠宝和石头
    216. Combination Sum III 组合总数三
    384. Shuffle an Array 随机播放一个数组
    382. Linked List Random Node 链接列表随机节点
    向github项目push代码后,Jenkins实现其自动构建
    centos下安装Jenkins
    python提取批量文件内的指定内容
    批处理实现:批量为文件添加注释
    python抓取每期双色球中奖号码,用于分析
  • 原文地址:https://www.cnblogs.com/chenmh/p/5354100.html
Copyright © 2011-2022 走看看