当前位置:首页 > 日记 > 正文

分析和优化MySQL插入方法的五个技巧

分析和优化MySQL插入方法的五个技巧
大约20万的数据插入操作工作中遇到的,在程序中发现了超时,修改PHP最大执行时间600,或超时超时数据预测数插入前,约40 ~ 60分钟完成加工成书面的计划,看来效率太低优化。
测试计算机配置:
处理器:AMD闪龙(TM)处理器
内存:1.5g
以下语句如下:
复制代码代码如下所示:
插入测试(测试)值($);
($ i = 1;$ i < 1000;$ + +){
mysql_query($ SQL);
}
该mysql_unbuffered_query运行三的执行时间如下:
九点八五三二一八七九三八七
九点四三二二三七一四八二八
九点四六八五八二一五三三二
对mysql_query执行时间:
十点零零二零二二九八一六
九点六一零五三二零四五三六
九点二四四四二七二零四一三
到目前为止,我认为最高效率如下:
插入测试(测试)值($);
($ i = 1;$ i < 999;$ + +){
$ SQL($)。;
}
mysql_query($ SQL);
执行时间是:
零点零三二三四八一五五九七五三
零点零三七一七五八九三七八三六
零点零四一九六六九一五一三零六

INSERT语句的速度
插入记录所需的时间由下列因素组成,其中的数字与比例有关:
连接:(3)
向服务器发送查询:(2)
分析查询:(2)
插入记录:(1记录大小)
插入索引:(1X指数)
关闭:(1)
这不考虑打开表的初始开销,并且同时运行的每个查询都打开。
表的大小会随着登入速度指标的插入(B树)。
加速插入的几种方法:
如果多行插入来自同一客户端的同时,几行被插入在同一时间使用一个包含多个值的INSERT语句。这比使用一个单一的线插入语句的速度(在某些情况下多次)。如果你将数据添加到一个非空表,你可以调整bulk_insert_buffer_size变量进行数据插入速度更快。看到5.3.3部分服务器的系统变量。
如果你插入大量的线从不同的客户,可以加快通过延迟插入语句。看到13.2.4部分插入语法。
MyISAM,如果没有删除表中的行,你可以插入行在SELECT语句运行。
当一个表是一个文本文件加载,加载数据文件使用。这通常比许多INSERT语句快20倍。
当表中有很多指标,可以做更多的工作来让LOAD DATA INFILE更快。使用下面的过程:

创建有选择的创建表的表。
执行FLUSH TABLES语句或mysqladmin flush-tables命令。
用myisamchk -键用= 0只/路径/ / / tbl_name.this DB将取消从表中所有指标的使用。
数据插入表加载数据文件,因为它不更新任何指数,所以很快。
如果你只是想读表后,使用MyISAMPack压缩。
重新创建索引和myisamchk - R Q / / /数据库路径 / tbl_name.this写入磁盘之前将在内存中创建一个索引树,它会更快,因为它避免了大量的磁盘搜索。结果,索引树也是完美的平衡。
执行FLUSH TABLES语句或mysqladmin flush-tables命令。

请注意,如果你将一个空的MyISAM表,LOAD DATA INFILE可以优化前端的实现;主要差异会使myisamchk创建指标分配的临时内存超过负荷数据,对服务器重新创建索引分配更多的infile语句。
你也可以使用ALTER TABLE tbl_name禁用按键代替myisamchk --用= 0只/路径/ / / tbl_name dB键,使用ALTER TABLE tbl_name tbl_name代替钥匙。这样,你也可以跳过冲洗表。
锁表可以加快用多个语句执行的插入操作:
锁定表;
插入一个值(1,23),(2,34),(4,33);
插入一个值(8,26),(6,29);
打开表;
这种性能会提高,因为在所有INSERT语句完成后,索引缓存只刷新到磁盘一次。INSERT语句的数量通常刷新了多少个索引缓存区域。如果您可以用一个语句插入所有行,则不需要锁定它。
对于事务表,应该使用起始和提交而不是锁定表来加快插入速度。
锁定也将减少多个连接测试的总时间,尽管它们正在等待最大等待时间的上升:
连接1执行1000个插入
2个连接,3个和4个做1个插入
连接5执行1000个插入
如果不使用锁定,2, 3和4将在1和5之前完成。如果使用锁定,2, 3和4可能不会在1或5之前完成,但总时间应该在40%左右。
插入、更新和删除操作都是在MySQL的速度非常快,和更好的性能,可以通过插入或更新操作和锁超过5次了。如果多插入一行行锁表,可以执行,然后打开表(约1000行)立即执行允许其他线程访问表。这也将获得良好的性能。
插入数据加载比LOAD DATA INFILE慢得多,即使使用上述策略。
为了增加对MyISAM表的LOAD DATA INFILE和插入的速度,关键是通过增加缓存key_buffer_size系统变量扩展。
插入语法
复制代码代码如下所示:
{ } {插入low_priority延迟high_priority忽略} | |
{在} { }(tbl_name col_name,…)
({ } |默认值表达式,…),(…),…
{重复密钥更新col_name =表达式,…}


复制代码代码如下所示:
{ } {插入low_priority延迟high_priority忽略} | |
{在} tbl_name
设置默认col_name = { } | expr,…
{重复密钥更新col_name =表达式,…}


复制代码代码如下所示:
插入high_priority } { } { low_priority忽略|
{在} { }(tbl_name col_name,…)
选择…
{重复密钥更新col_name =表达式,…}

一、延迟使用
使用延迟插入操作
延迟调节器应用于插入和替换语句。当延迟插入操作到达时,
服务器将数据线放入队列中,并立即将状态信息返回给客户机,以便客户。
在数据表真正插入记录之前,可以继续操作。
数据在表中读取,队列中的数据保存到没有读写器。
开始在延迟数据线(延迟行)队列中插入数据行。
还要检查是否有一个新的读取请求到达和等待。如果存在延迟数据线队列,则挂起。
允许读取器继续操作。当没有读取器时,服务器再次开始插入延迟的数据行。
此过程已完成,直到队列为空。
应注意的几个问题:
插入延迟应仅用于指定值列表的INSERT语句。服务器忽略插入延迟的延迟…SELECT语句。
服务器忽略延迟插入的延迟…关于重复更新语句。
由于插线,声明立即返回,所以不能用last_insert_id()得到auto_increment价值,auto_increment值可由报表生成。
对于SELECT语句,在这些行真正插入之前,延迟行是不可见的。
延迟在从属复制服务器中被忽略,因为延迟不会产生与从属服务器中的主服务器不相同的数据。
值得注意的是,队列中的所有行,目前只存储在记忆中直到他们插入表。这意味着,如果你强行中止mysqld(例如,使用杀9)
如果mysqld意外停止,所有的线都没有写入到磁盘将丢失。

使用两个,忽略
忽略是相对于标准SQL的MySQL的扩展。如果在新表中有一个重复键,
或在启动严格模式后出现警告时,使用忽略控制更改表的操作。
如果未指定忽略,则在重复关键字错误发生并返回到前一步时,复制操作将被放弃。
如果指定了忽略,对于重复关键字的行,只使用第一行,删除其他冲突行。
并纠正错误值,使其尽可能接近正确值。
将忽略插入到TB(…)值(…)
它不需要检查它是否存在,它被忽略,没有添加。

三的使用,关于重复密钥更新
如果在重复密钥更新和插入行上指定,它将在唯一索引或主键中产生重复的值,然后执行旧行更新。例如,如果列A被定义为唯一且包含值1,则以下两个语句具有相同的效果:
MySQL >插入表格(A,B,C)值(1,2,3)
重复密钥更新C = C + 1 - >关于;

更新表集C=C + 1,其中a = 1;

如果将行插入为新记录,则受影响行的值为1;如果更新原始记录,则受影响行的值为2。
注意:如果列B是唯一的列,则插入等同于UPDATE语句:
更新表集C = C + 1,其中A = 1或B = 2限制1;

如果a = 1或b = 2匹配多行,则只更新一行。一般来说,您应该避免使用带有多个关键字的表使用重复关键字子句。

你可以使用价值(col_name)从插入…更新条款功能的UPDATE语句的插入部分指列值。换句话说,如果没有重复的关键字冲突,价值观(col_name)在更新条款是指可以插入col_name.this函数值特别适合多行插入的值()函数仅在插入…update语句是有意义的,而在其他时间将会返回null。
实例:
复制代码代码如下所示:
MySQL >插入表格(A,B,C)值(1,2,3),(4,5,6)
复制密钥更新>关于C =值(a)+值(b);
本声明与以下两项声明相同:
MySQL >插入表格(A,B,C)值(1,2,3)
重复密钥更新C = 3 - >关于;
MySQL >插入表格(A,B,C)值(4,5,6)
重复密钥更新C = 9 - >关于;

当您使用重复密钥更新时,延迟选项将被忽略。

相关文章

删除Outlook附件,但如何保持文本/PS

删除Outlook附件,但如何保持文本/PS

文件,文本,删除,太大,附件,问题: 我经常使用Outlook的电子邮件客户端,使用POP3和SMTP协议,如已使用了两年多,PST文件已达16GB,感觉太大了,我想保持短信,删除附件,我不知道如何操作,请 回答: 这需要使用第三方工具来修复,Outlook附件Sniffer;这个工具…

PHP代码,用于各种图像处理功能

PHP代码,用于各种图像处理功能

图像处理,用于,代码,功能,电脑软件,首先,创建图片资源 新建一个真彩色图像(宽度,高度); Imagecreatefromgif(图片名称); Imagecreatefrompng(图片名称); Imagecreatefromjpeg(图片名称);绘制各种图像imagegif(图片资源,保存路径); Imagepng() Imagejpeg(); 两。…

是aptezbp.exe为aptezbp过程信息查

是aptezbp.exe为aptezbp过程信息查

过程,信息查询,电脑软件,aptezbp,exe,审查:IBM计算机用户扩展键自定义程序 进程文件:aptezbp或aptezbp.exe 进程名称:aptezbp 过程类别:安全风险的过程 英文描述: 允许用户自定义和使用快速访问的软件 中文参考: IBM计算机用户扩展键自定义程序…

iPhone5s的iOS7系统(解决方案)不能被

iPhone5s的iOS7系统(解决方案)不能被

系统,升级,解决方案,电脑软件,iPhone5s,问题: 最近,电脑上的iTunes已经升级到最新版本11.1,和iPhone5s是与电脑连接的数据线,发现它不能识别。有什么问题吗 答案uff1a 在这种情况下,当iPhone5s连接到电脑,需要重新安装驱动程序,这个过程需要在设…

在WinXP系统管理员用户帐户不见的

在WinXP系统管理员用户帐户不见的

系统管理员,用户,方法,帐户,教程,评论:什么是管理员用户帐户在WinXP系统做什么,以及如何创建一个新的管理员帐户在WindowsXP系统中创建管理员用户帐户有很多方法,包括使用CMD命令行的网络命令、控制面板的图形界面和计算机管理控制台。 对于Wi…

如何删除XP附件中的游戏组件,无法在

如何删除XP附件中的游戏组件,无法在

删除程序,组件,删除,附件,中找到,点评:电脑房里安装的电脑房都是XP系统。现在我想删除游戏中的附件很长一段时间。在控制面板的添加/删除程序中,没有该问题的解决方案。本文给出了详细的解决方案。有兴趣的朋友不该错过。 问:我是机房管理员,安…

itunessetup.exe不是有效的Win32应

itunessetup.exe不是有效的Win32应

应用程序,图文,电脑软件,itunessetup,exe,在XP中安装iTunes,Windows7(Win7)、Vista、Windows2000等系统。如果安装不可能,系统提示。itunessetup.exe不是有效的Win32应用程序。 原因:下载iTunes可能是个问题。 解决方案: 1。如果系统装有IE7浏…

运行Win7的AppLocker功能管理程序

运行Win7的AppLocker功能管理程序

管理程序,运行,功能,电脑软件,AppLocker,点评:Windows7添加AppLocker功能(应用程序控制策略)对XP系统的基础。用户可以使用它轻松创建一个程序的限制性策略,感兴趣的朋友可以理解它。 有一个情况没有生命,有时人们把你电脑的QQ从不聊天或长时间…

提高excel表格工作效率的隐藏实用

提高excel表格工作效率的隐藏实用

工作效率,实用技术,表格,电脑软件,excel,我们认为,对于这么长时间的Excel,软件的功能,只能用强大来描述,但有很多隐藏的技巧,我们不知道你是否知道还有,这些隐藏的技巧,实用价值很高,特别是在这里学习我们总结了几天以后提高工作效率的技术,希望对大…

WPS表使用多条件求和和函数对测试

WPS表使用多条件求和和函数对测试

函数,多条,和和,测试,电脑软件,学生成绩统计是教师的基本工作之一。每个班都有这么多学生。那么怎样才能得到最准确有效的统计数据呢这次我们将解释用WPS表格计算学生测试结果的快速和准确。 WPS表的统计操作步骤如下: 选中M2单元格,单击插入…

同步助手在运行和退出时安装IPA软

同步助手在运行和退出时安装IPA软

安装,退出,运行,解决方案,同步,问题: 使用同步助手的原因是什么安装的IPA软件和运行完后的Flash。 答案uff1a 在安装带有同步助理的IPA软件时,由于以下原因,闪存已不存在: 首先,如果安装的是破解版的IPA,请确认您的手机安装了iOS补丁AppSync; …

QQ空间在什么情况下是密封的

QQ空间在什么情况下是密封的

密封,空间,情况下,电脑软件,QQ,QQ空间在什么情况下是密封的 以下是以下内容: 答:有一个QQ空间,利用非法买卖Q币、非法使用恶意程序、刷QQ空间刷人气钻石服务; 二:传播黑客网站、木马程序、发布色情、政治等信息,以宣传邪教; 情况三:作弊冒充公司…