网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > 数据库技术 > Oracle > 性能调优 > MySQL数据库优化(四)-性能调优  

MySQL数据库优化(四)-性能调优

2008-06-14  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

 

  4  加速 INSERT

网管联盟bitsCN_com

  插入一条记录花费的时间由以下几个因素决定,后面的数字大致表示影响的比例: 网管u家www.bitscn.net

  连接:(3)

网管联盟bitsCN@com

  发送查询给服务器:(2)

网管联盟bitsCN@com

  解析查询:(2)

网管下载dl.bitscn.com

  插入记录:(1 x 记录大小)

网管网www.bitscn.com

  插入索引:(1 x 索引数量)

网管bitscn_com

  关闭:(1)

网管朋友网www_bitscn_net

  这里并没有考虑初始化时打开数据表的开销,因为每次运行查询只会做这么一次。

网管bitscn_com

  如果是 B-tree 索引的话,随着索引数量的增加,插入记录的速度以 log N 的比例下降。 网管网www_bitscn_com

  可以使用以下几种方法来提高插入速度: 网管有家bitscn.net

  •   如果要在同一个客户端在同一时间内插入很多记录,可以使用 INSERT 语句附带有多个 VALUES 值。这种做法比使用单一值的 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 Compressed Table Characteristics\"。
    •   运行 myisamchk -r -q /path/to/db/tbl_name 重建索引。创建的索引树在写入磁盘前先保存在内存中,这省去了磁盘搜索,因此速度快多了。重建后的索引树分布非常均衡。
    •       执行 FLUSH TABLES 语句或 mysqladmin flush-tables 命令。

  注意,LOAD DATA INFILE 将数据插入一个空表时,也会做前接优化;主要的不同在于:运行 myisamchk 会分配更多的临时内存用于创建索引,而执行 LOAD DATA INFILE 命令则是让数据库服务器分配内存用于重建索引。从 MySQL 4.0 起,可以运行 ALTER TABLE tbl_name DISABLE KEYS 来代替 myisamchk --keys-used=0 -rq /path/to/db/tbl_name,运行 ALTER TABLE tbl_name ENABLE KEYS 代替 myisamchk -r -q /path/to/db/tbl_name。这么做就可以省去 FLUSH TABLES 步骤。

网管网www.bitscn.com

网管下载dl.bitscn.com

TAGs   性能   优化   数据库   记录   索引   使用   如果       数据   MySQL      
 上一篇:Oracle 9i在AIX上的性能调整─内存篇-性能调优   下一篇:MySQL数据库优化(五)-性能调优
MySQL数据库优化(四)-性能调优 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: