多时候关心的是优化select 查询,因为它们是最常用的查询,而且确定怎样优化它们并不总是直截了当.相对来说,将数据装入数据库是直截了当的.然而,也存在可用来改善数据装载操作效率的策略,其基本原理如下:
在表无索引时装载比索引后装载更快.如果有索引,不仅必须增加记录到数据文件,而且还要修改每个索引以反映增加了的新记录. 【程序编程相关:全面分析防火墙及防火墙的渗透(1)】
成批装载较单行装载更快,因为在装载每个记录后,不需要刷新索引高速缓存;可在成批记录装入后才刷新. 【推荐阅读:选用单防火墙DMZ还是双防火墙DMZ】load data(包括其所有形式)比insert 效率高,因为其成批装载行.索引刷新较少,并且服务器只需分析与解释一条语句而不是几条语句. 【扩展信息:防火墙基础知识与常见相关术语】
较短的sql 语句比较长的sql 语句要快,因为它们涉及服务器方的分析较少,而且还因为将它们通过网络从客户机发送到服务器更快.这些因素中有一些似乎微不足道(特别是最后一个因素),但如果要装载大量的数据,即使是很小的因素也会产生很大的不同结果.我们可以利用上述的一般原理推导出几个关于如何最快地装载数据的实际结论:
load data 比load data local 效率更高.利用load data,文件必须定位在服务器上,而且必须具有file 权限,但服务器可从磁盘直接读取文件.利用load data local,客户机读取文件并将其通过网络发送给服务器,这样做很慢.
如果必须使用insert,应该利用允许在单个语句中指定多行的形式,例如:
560)this.style.width=560; onmousewheel = javascript:return big(this) height=28 src="/files/uploadimg/20051129/1649370.jpg" width=361>可在语句中指定的行越多越好.这样会减少所需的语句数目,降低索引刷新量.如果使用mysqldump 生成数据库备份文件,应该使用--extended-insert 选项,使转储文件包含多行insert 语句.还可以使用- - o p t(优化) ,它启用--extended-insert 选项.... 下一页