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

[转]MySQL innoDB数据插入性能优化

转载自: http://hiyijian.blog.163.com/blog/static/173086472201121621326471/

起因:有一个innoDB引擎的表Table,在一个大概3000次的foreach循环中执行

INSERT INTO Table(columnA, columnB) VALUES (valueA, valueB)


结果居然超出了60S的php执行限制(当然这个限制可以在php.ini中修改),让我很不解为何插入效率如此低下。

经过查找资料以及摸索,得到以下优化方法:

1、innoDB是mysql引擎中唯一支持事务transaction的引擎。默认所有用户行为都在事务内发生。
默认mysql建立新连接时,innoDB采用自动提交autocommit模式,每个SQL语句在它自己上形成一个单独的事务,即insert一次就commit了一次,InnoDB在该事务提交时必须刷新日志到磁盘,因此效率受限于磁盘读写效率。
你可以通过

mysql_query("SET AUTOCOMMIT = 0");


来关闭自动提交模式。

如果自动提交模式被关闭,那么我们可以认为一个用户总是有一个事务打开着。一个SQL COMMIT或ROLLBACK语句结束当前事务并且一个新事务开始。两个语句都释放所有在当前事务中被设置的InnoDB锁定。一个COMMIT语句意味着在当前事务中做的改变被生成为永久的,并且变成其它用户可见的。一个ROLLBACK语句,在另一方面,撤销所有当前事务做的修改。
当然如果是自动提交模式,通过用明确的START TRANSACTION或BEGIN语句来开始一个事务,并用COMMIT或者ROLLBACK语句来结束它,这样用户仍旧可以执行一个多重语句事务。

2、因此对于本例,在建立数据库连接后,立即关闭自动提交,在foreach循环结束后,一次commit即可,效率大大提升。

mysql_query("SET AUTOCOMMIT = 0");
foreach(***)
  INSERT INTO Table(columnA, columnB) VALUES (valueA, valueB)
mysql_query("commit");



3、对于多次insert行到同一表的需求,你还可以采用多行插入语法来减少客户端和服务器之间的通讯开支。


INSERT INTO Table(columnA, columnB) VALUES (1,2), (5,5), (3,3), ...



4、如果你的表有索引,索引会拖慢insert速度。大量插入数据时,可以先关闭索引,然后再重建索引。

ALTER TABLE Table DISABLE KEYS;
INSERT INTO ***;
ALTER TABLE Table ENABLE KEYS;

相关文章:

vue+ivew-admin开发项目,内存占用过大解决办法

项目用的ivewadmin ivewUI,直接从github上拉下来用的,配置也没改,我们页面比较多,大该30个页面的样子,一启用,我们的电脑就卡了,然后,看一下,内存占用 1.5G了&#xff0c…

腾讯微视:向前一步是悲壮,向后一步是绝望zz

“换做以往的任何一场战争,微博之战、搜索之战和电商之战——大量投入但始终不见效果,打到现在腾讯肯定已经交牌了。微视的不同之处在于,它有些悲壮,因为这是腾讯最不想交出的一张牌。” 文 | 《财经》记者高洪浩 编辑|宋玮 如果有…

[C]线程中的数据

线程的私有存储空间包括: 栈(一般情况下是私有的)线程局部存储(部分操作系统提供)寄存器(包括PC寄存器) 从C程序员的角度来看: 线程私有: 局部变量函数的参数线程局部存储…

【css】如何使页面压缩时文本内容不换行

问题描述: 当页面变小时,有些情况下会出现下图所示的情况,即文本自动换行 页面变小前: 变小后: 解决方法: 使用CSS添加一个控制语句 .fence_control{white-space: nowrap; } 并在文本所在的标签属性中添加该控制 …

程序员面试题精选100题(61)-数对之差的最大值

题目:在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果。 分治策略: 通常蛮力法不会是最好的解法&#xff0c…

Unity UGUI获取鼠标在屏幕的准确点击位置

想要获取鼠标在屏幕的准确点击位置,千万不要胡乱写,什么转化坐标系,什么Ray射线检测都是浮云。 1,转化坐标系只是相对而言,并不能准确实现当前鼠标点击在屏幕的位置; 2,Ray检测,hit是…

Numpy学习笔记(下篇)

目录 Numpy学习笔记(下篇)一、Numpy数组的合并与分割操作1、合并操作2、分割操作二、Numpy中的矩阵运算1、Universal Function2、矩阵运算3、向量和矩阵运算三、Numpy中的聚合操作四、Numpy中的arg运算1、索引操作2、排序和索引使用五、Fancy Indexing六…

VC串口通信编程-2

VC串口通信编程 (2009-07-08 13:48:40) 转载▼Win32串口编程(转:韩耀旭)  在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信。串口通信方便易行,应用广泛。一般…

【bootstrap】如何解决页面缩小后上方导航栏格式变化的问题

问题描述: bootstrap官方模板中上方导航栏当缩小到一定程度后会发生格式的变化,但我想取消这种变化 页面缩小前: 页面缩小后: 解决方法: 经过阅读bootstrap的css代码后发现了这么一行代码: 将其删除后问…

ASIHttpRequest使用前的配置

ASIHttpRequest使用前的配置 1、从以下地址获取ASIHttpRequest相关资源文件: Github project page: http://github.com/pokeb/asi-http-request/tree Download the latest version: http://github.com/pokeb/asi-http-request/tarball…

当面试官问这些基础的Python问题时,竟然还有80%的人不会!

怎样才能开始一个交互式解释器的会话? 在Windows下可以通过点击开始按钮,选择“程序”,点击“Python”,然后选择“Python(command line)”菜单选项来开始一个交互会话。 你应该在哪里输入系统命令行来启动一…

xcode 4.3.2 use storyboard创建TableView

xcode 4.3.2 use storyboard 使用TableView,显示一个颜色列表,表格包括一张图片,一个文本,一行副文本。 TableView 呈现列表格式的数据,每一行是一个UITableViewCell对象,每个UITableViewCell可以显示文本标…

VScode 插件、配置记录

常用插件: Chinese(Simplified)pythonTabNineSettings Sync 配置: 外观设置为: Solarized Dark 转载于:https://www.cnblogs.com/yeran/p/11284772.html

【jqgrid】疑难杂症及解决方法(随缘更新)

最近在学习使用jqgrid,由于初次使用就要应用的工程的开发当中,还是遇到了不小的麻烦,在此梳理遇到的问题及解决方法。 遇到问题: 1、如何解决翻页键不好用的问题 2、如何调整grid的宽度和高度 3、当grid宽度超过页面的宽度之后…

vcenter converter 转换xenserver下linux的错误

需求:需将xenserver5.6上的一台ubuntu迁移到ESXi 4.1.0上面 首先部署一台vmware vcenter converter standalone,具体步骤省略,到99%时出现错误: 无法重新配置目标虚拟机。 检查日志,发现这么一句话: (converter.fault.CloneFault) { dynamicT…

使用xml布局菜单

目前为止我们都是通过硬编码来增加菜单项的,android为此提供了一种更便利的方式,就是把menu也定义为应用程序的资源,通过android对资源的本地支持,使我们可以更方便地实现菜单的创建与响应。这一篇就介绍如何使用XML文件来加载和响…

Prevent Crow's Feet

来源:http://www.howbeauty.org/anti-aging/223424.htm Wear a sunscreen with an SPF of at least fifteen that blocks both UVA and UVB rays whenever you go outside. Be sure to apply it to your eyelids and under your eyes.Wear sunglasses when youll be…

【css】如何使光标移动到某个区域后改变形状

问题描述&#xff1a; 当光标移动到页面的某个位置的时候需要使其改变形状&#xff0c;如变成一个伸出食指的小手等等。 解决方法&#xff1a; 使用到css中的cursor属性 代码实现&#xff08;以伸出食指的小手为例&#xff09;&#xff1a; <!DOCTYPE html> <html …

iphone开发UITable内嵌不同风格Table

在iphone开发中使用Table的时候&#xff0c;由于Table有的风格UITableViewStylePlain或者UITableViewStyleGrouped一旦指定&#xff0c;便无法修改。但是在使用的过程中&#xff0c;总是会出现一些特殊的需求&#xff0c;他们要求可以同时使用不同的风格。 那么可以在制作table…

php面试题8

php面试题8 一、总结 二、php面试题8 1、表单数据提交方式 POST 和 GET 的区别&#xff0c;URL 地址传递的数据最大长度是多少&#xff1f;$_GET 传参是请求 HTTP 协议通过 url 参数传递和接收,会在浏览器地址栏中看到$_GET 传参最多 2k 个字符$_POST 是实体数据传参,隐藏式的,…

php 计算器

<html><head><title>PHP实现简单计算器</title><meta http-equiv"Content-Type" content"text/html;charsetgb2312"></head> <?php$num1true;$num2true;$numatrue;$numbtrue;$message"";//单路分支if(i…

【jQuery】如何用jQuery实现鼠标移入后改变背景颜色

实现效果如图&#xff1a; jQuery代码实现&#xff1a; $(function () {var oldColor "";$(".mouse-in-out").mouseover(function () {originalColor $(this).css("background-color");$(this).css("background-color","#d9e8f…

域用户权限设置目录权限

声明&#xff1a;本文转载自gnaw0725.blogbus.com&#xff0c;更新网址&#xff1a;http://gnaw0725.blog.51cto.com。 一般用户是domain user权限&#xff0c;现在设置的策略是&#xff0c;每个硬盘分区的权限下只有administratordomain,和userdomain可以读写&#xff0c;遇到…

有用的编程相关网站

1.代码可视化网站&#xff1a;http://www.pythontutor.com 转载于:https://www.cnblogs.com/fuqia/p/9074571.html

手把手教你如何扩展GridView之自带CheckBox

我们在使用GridView的时候&#xff0c;很多时候需要使用CheckBox列&#xff0c;比如批量删除&#xff0c;批量审批&#xff0c;但是每每都需要记住繁琐的实现方法。多麻烦呀&#xff01;再次给GridView做个手术&#xff0c;让它自己就能产生CheckBox岂不爽死了。以后您就有权利…

c++ 的重载、覆盖、隐藏

成员函数被重载的特征&#xff1a;&#xff08;1&#xff09;相同的范围&#xff08;在同一个类中&#xff09;&#xff1b;&#xff08;2&#xff09;函数名字相同&#xff1b;&#xff08;3&#xff09;参数不同&#xff1b;&#xff08;4&#xff09;virtual关键字可有可无。…

【css】padding 和 margin的区别

css中有有一对经常是一起出现的属性&#xff1a;padding和margin&#xff0c;接下来我们以一个例子来看一下两个属性的作用及其区别。 实例演示&#xff1a; 使用属性前&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"en"> <head&…

POJ-2159(Water)

2159:Ancient Cipher 查看提交统计提问时间限制: 1000ms 内存限制: 65536kB 描述 Ancient Roman empire had a strong government system with various departments, including a secret service department. Important documents were sent between provinces and the capital…

tensor乘运算

torch.mul(a, b) 是矩阵 对应位相乘&#xff0c;即点乘操作&#xff0c; a和b的维度必须相等&#xff0c;a的维度是(1,2)&#xff0c; 则b的维度必须是&#xff08;1,2&#xff09;&#xff0c; 返回还是&#xff08;1,2&#xff09;的矩阵 torch.mm(a,b)是矩阵a和b矩阵相乘&am…

android,与PHP通信,返回JSON

小项目需要读取数据库&#xff0c;刚好手头有服务器&#xff0c;处于某些考虑&#xff0c;还是想远程读数据&#xff0c;所遇异常 Logcat异常&#xff1a;SingleClientConnManager(411): Invalid use of SingleClientConnManager: connection still allocated. Make sure to re…