无图版
|
左右分栏
» 您尚未
登录
注册
|
搜索
|
朋友圈
|
帮助
社区服务
银行
朋友圈
搜索工具
PHP学会网 php培训网 PHP暑期培训 PHP寒假培训 PHP假期培训
»
PHP中高级
»
MySQL手册版本 5.0.20-MySQL优化(四) (1)(3)
交 易
投 票
本页主题:
MySQL手册版本 5.0.20-MySQL优化(四) (1)(3)
打印
|
加为IE收藏
|
收藏主题
|
上一主题
|
下一主题
meiwang12363
级别:
中级程序员
精华:
1
发帖:
1069
威望:
0 点
金钱:
0 PYMB
贡献值:
0 点
在线时间:8(小时)
注册时间:2007-04-26
最后登录:2007-09-04
MySQL手册版本 5.0.20-MySQL优化(四) (1)(3)
7.2.12 加速 INSERT
插入一条记录花费的时间由以下几个因素决定,后面的数字大致表示影响的比例:
连接:(3)
发送查询给服务器:(2)
解析查询:(2)
插入记录:(1 x 记录大小)
插入索引:(1 x 索引数量)
关闭:(1)
这里并没有考虑初始化时打开数据表的开销,因为每次运行查询只会做这么一次。
如果是 B-tree 索引的话,随着索引数量的增加,插入记录的速度以 log N 的比例下降。
可以使用以下几种方法来提高插入速度:
如果要在同一个客户端在同一时间内插入很多记录,可以使用 INSERT 语句附带有多个 VALUES 值。这种做法比使用单一值的 INSERT 语句快多了(在一些情况下比较快)。如果是往一个非空的数据表里增加记录,可以调整变量 bulk_insert_buffer_size 的值使之更快。详情请看"5.2.3 Server System Variables"。
如果要从不同的客户端中插入大量记录,使用 INSERT DELAYED 语句也可以提高速度。详情请看"14.1.4 INSERT Syntax"。
对 MyISAM 而言,可以在 SELECT 语句正在运行时插入记录,只要这时候没有正在删除记录。
想要将一个文本文件加载到数据表中,可以使用 LOAD DATA INFILE。这通常是使用大量 INSERT 语句的20倍。详情请看"14.1.5 LOAD DATA INFILE Syntax"。
通过一些额外的工作,就可能让 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 步骤。
Posted: 2007-08-31 10:26 |
[楼 主]
快速跳至
>> php培训
|- 培训咨询和报名
>> 学员专区
|- 学员交流区
>> 开源项目
|- 项目开发
|- OSC技术交流
|- CMS开源项目研究
|- 下载
>> PHP和web开发
|- 入门和基础知识
|- PHP中高级
|- 网站SEO
|- PHP资源共享
|- YUI,ext JS
|- 数据库应用
|- 操作系统(Windows、Linux)
|- 英语学习
|- 数据结构和算法
|- web2.0
>> 信息发布
|- 招聘和求职
>> 娱乐论坛
|- BT软件&教程发布
|- BT影视&音乐
|- 娱乐乐园
>> PHP世纪
|- 站务管理
PHP学会网 php培训网 PHP暑期培训 PHP寒假培训 PHP假期培训
»
PHP中高级
今日推荐
隐藏
显示
关闭
现在时间:08-28 18:38
Copyright © 2006 phpwhy.com 版权所有
浙ICP备05060669号
关于我们 -
合作联系