li
  当前位置:主页 > 基础知识 > 文章内容
li
MySQL改善数据装载操作效率的策略
来源: www.ixdba.net  作者: ixdba.net技术社区    时间:2008-03-23   阅读:6  
本文章共2165字,分2页,当前第1页,快速翻页:
 
ixdba.net技术社区mysql技术专题栏目:如果对这些技术问题有任何疑问,请给我们在文章后面留言:


很多时候关心的是优化SELECT 查询,因为它们是最常用的查询,而且确定怎样优化它们并不总是直截了当。相对来说,将数据装入数据库是直截了当的。然而,也存在可用来改善数据装载操作效率的策略,其基本原理如下:

成批装载较单行装载更快,因为在装载每个记录后,不需要刷新索引高速缓存;可在成批记录装入后才刷新。

在表无索引时装载比索引后装载更快。如果有索引,不仅必须增加记录到数据文件,而且还要修改每个索引以反映增加了的新记录。

较短的SQL 语句比较长的SQL 语句要快,因为它们涉及服务器方的分析较少,而且还因为将它们通过网络从客户机发送到服务器更快。这些因素中有一些似乎微不足道(特别是最后一个因素),但如果要装载大量的数据,即使是很小的因素也会产生很大的不同结果。我们可以利用上述的一般原理推导出几个关于如何最快地装载数据的实际结论:

LOAD DATA(包括其所有形式)比INSERT 效率高,因为其成批装载行。索引刷新较少,并且服务器只需分析和解释一条语句而不是几条语句。

LOAD DATA 比LOAD DATA LOCAL 效率更高。利用LOAD DATA,文件必须定位在服务器上,而且必须具有FILE 权限,但服务器可从磁盘直接读取文件。利用LOAD DATA LOCAL,客户机读取文件并将其通过网络发送给服务器,这样做很慢。

如果必须使用INSERT,应该利用允许在单个语句中指定多行的形式,例如:

可在语句中指定的行越多越好。这样会减少所需的语句数目,降低索引刷新量。如果使用 mysqldump 生成数据库备份文件,应该使用--extended-insert 选项,使转储文件包含多行INSERT 语句。还可以使用- - o p t(优化) ,它启用--extended-insert 选项。反之,应该避免使用mysqldump 的--complete-insert 选项;此选项会导致INSERT 语句为单行,执行时间更长,比不用--complete-insert 选项生成的语句需要更多的分析。

使用压缩了的客户机/服务器协议以减少网络数据流量。对于大多数MySQL客户机,可以用--compress 命令行选项来指定。它一般只用于较慢的网络,因为压缩需要占用大量的处理器时间。

让MySQL插入缺省值;不要在INSERT 语句中指定将以任意方式赋予缺省值的列。平均来说,这样做语句会更短,能减少通过网络传送给服务器的字符数。此外,语句包含的值较少,服务器所进行的分析和转换就会较少。

如果表是索引的,则可利用批量插入( LOAD DATA 或多行的INSERT 语句)来减少索引的开销。这样会最小化索引更新的影响,因为索引只需要在所有行处理过时才进行刷新,而不是在每行处理后就刷新。

如果需要将大量数据装入一个新表,应该创建该表且在未索引时装载,装载数据后才创建索引,这样做较快。一次创建索引(而不是每行修改一次索引)较快。

如果在装载之前删除或禁用索引,装入数据后再重新创建或启用索引可能使装载更快。如果想对数据装载使用删除或禁用策略,一定要做一些实验,看这样做是否值得(如果将少量数据装入一个大表中,重建和索引所花费的时间可能比装载数据的时间还要长)。

可用DROP INDEX 和CREATE INDEX 来删除和重建索引。另一种可供选择的方法是利用myisamchk 或isamchk 禁用和启用索引。这需要在MySQL服务器主机上有一个帐户,并对表文件有写入权。为了禁用表索引,可进入相应的数据库目录,执行下列命令之一:

对具有.MYI 扩展名的索引文件的MyISAM 表使用myisamchk,对具有.ISM 扩展名的索引文件的ISAM 表使用isamchk。在向表中装入数据后,按如下激活索引:

www.ixdba.net


如果决定使用索引禁用和激活,应该使用第13章中介绍的表修复锁定协议以阻止服务器同时更改锁(虽然此时不对表进行修复,但要对它像表修复过程一样进行修改,因此需要使用相同的锁定协议)。



阅读更多内容1 · 2 · 下一页>>


  上一篇: 设计高效合理的MySQL查询语句讲解   下一篇: 在MySQL中执行SQL语句时的几个注...
li
 §相关评论  
 热点文章

·RewriteRule重写规则的语法:A
·apache配置文件httpd.conf参数
·Apache的配置文件http.conf参数
·HTTP协议中POST、GET、HEAD等参
·XAMPP命令之LAMPP
·Linux中安装XAMPP(LAMPP)服务器
·网页禁止右键、禁止复制等代码
·java.lang.OutOfMemoryError:
·Mysql数据库在Linux系统常用命
·mysql问答:MySQL数据库连接过多
·MySQL数据库中Show命令的用法
li
 编辑推荐
·RewriteRule重写规则的语法:A
·apache配置文件httpd.conf参数
·Apache的配置文件http.conf参数
·HTTP协议中POST、GET、HEAD等参
·XAMPP命令之LAMPP
·Linux中安装XAMPP(LAMPP)服务器
·网页禁止右键、禁止复制等代码
·java.lang.OutOfMemoryError:
·Mysql数据库在Linux系统常用命
·mysql问答:MySQL数据库连接过多
·MySQL数据库中Show命令的用法
li
 相关篇章
·设计高效合理的MySQL查询语句讲解
·MySQL用户Root密码为弱口令的攻击
·MySQL数据库接口的VC具体实现与应...
·MySQL中修改密码及访问限制设置详...
·MySQL优化全攻略-相关数据库命令
·MySQL中文模糊检索问题的解决方法
·MySQL的数据类型和建库策略详解
·预防性维护MySQL数据库服务器详解
·如何使用MySQL系统的发布与安装
·利用图形界面从SQL导入导出到MyS...
·在MySQL中执行SQL语句时的几个注...
·MySQL在网络安全方面采取的主要措...
·MySQL各存储引擎的区别及其启动方...
·Linux操作系统下的"umask"函数详...
·RewriteRule重写规则的语法:Apa...
·apache配置文件httpd.conf参数详...
·Apache的配置文件http.conf参数含...
·HTTP协议中POST、GET、HEAD等参数...
·XAMPP命令之LAMPP
·Linux中安装XAMPP(LAMPP)服务器套...
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接