mysql插入数据变慢的原因_mysql插入数据变慢的原因
最近的项目需要导入大量的数据,插入的过程中还需要边查询边插入。插入的数据量在100w左右。一开始觉得100w的数据量不大,于是就插啊插,吃了个饭,回来一看,在插入了50多w条数据后,每秒就只能插10条了。。觉得很奇怪,为啥越插越慢呢? 于是就开始分析插入的时间损耗,想到了如下的解决方案:(mysql使用的INNODB引擎)
1.分析是否是由主码,外码,索引造成的插入效率降低
主码:由于主码是每张表必须有的,不能删除。而mysql会对主码自动建立一个索引,这个索引默认是Btree索引,因此每次插入数据要额外的对Btree进行一次插入。这个额外的插入时间复杂度约为log(n)。这个索引无法删除,因此无法优化。但是每次插入的时候,由于主码约束需要检查主码是否出现,这又需要log(n),能否减少这个开销呢?答案是肯定的。我们可以设置主码为自增id AUTO_INCREMENT ,这样数据库里会自动记录当前的自增值,保证不会插入重复的主码,也就避免了主码的重复性检查。
外码:由于我的项目的插入表中存在外码,因此每次插入时需要在另一张表检测外码存在性。这个约束是与业务逻辑相关的,不能随便删除。并且这个时间开销应当是与另一张表大小成正比的常数,不应当越插入越慢才对。所以排除。
索引:为了减少Btree插入的时间损耗,我们可以在建表时先不建索引,先将所有的数据插入。之后我们再向表里添加索引。该方法确实也降低了时间的开销。
经过以上的折腾,再进行测试,发现速度快了一点,但是到了50w条后又开始慢了。看来问题的关键不在这里。于是继续查资料,又发现了个关键问题:
mysql插入数据变慢的原因_mysql插入数据变慢的原因相关推荐
- mysql更新数据能回滚吗_mysql更新数据能回滚吗?如何实现呢?
不熟悉使用mysql数据库的朋友们,可能会对其有非常多的小问题,例如说,mysql更新数据可以回滚吗?我们应该如何去实现呢? 操作数据库时候难免会因为"大意"而误操作,需要快速恢复 ...
- mysql插入数据返回主键值_Mysql插入记录后返回该记录ID
最近和Sobin在做一个精品课程的项目,因为用到一个固定的id作为表间关联,所以在前一个表插入数据后要把插入数据生成的自增id传递给下一个表.研究了一番决定使用Mysql提供了一个LAST_INSER ...
- mysql表中的中文是乱码_mysql插入表中的中文显示为乱码或问号的解决方法
版权声明:本文为博主原创文章,未经博主允许不得转载. 今天在做ssh的博客项目时发现mysql数据库中的中文显示为问号,网上查阅了很多资料,都不是很全,所以我总结一下,供大家参考和自己复习. 1.我的 ...
- mysql启动不了的原因_mysql启动不了是什么原因
mysql启动不了的常见原因与解决办法: 1.mysql配置文件设置错误 A.首先查找mysql对应的配置文件my.ini 如果服务是使用指定的配置文件启动,到对应的文进行修改(文件的位置从控制面板中 ...
- mysql查询含有某个值的表_MYSQL查询数据表中某个字段包含某个数值
当某个字段中字符串是"1,2,3,4,5,6"或者"123456" 查询数据表中某个字段是否包含某个值 1:模糊查询 使用like select * from ...
- mysql 目录迁移 表找不到_MySQL 数据文件迁移找不到表
需要对一个生产库做一个repication,需要将master的数据导入到slave.个人觉得使用mysqldum在导入的时候比较费时(的确比较费时) 所以想偷懒,记录下master的index和po ...
- mysql insert id菜鸟_MySQL 插入数据
MySQL 插入数据 MySQL 表中使用INSERT INTOSQL语句来插入数据. 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 语法 以下为向 ...
- mysql插入语句例句_MySQL 插入/添加数据语句(INSERT INTO)用法详解
MySQL 插入数据操作使用 INSERT INTO 语句,它属于 DML(数据操作语言)范畴,该语句插入方式支持从简单的添加操作到唯一键(唯一索引)冲突时的更新操作,同时也支持查询结果直接插入操作. ...
- mysql 字段写入_MySQL为数据表的指定字段插入数据
username not null 没有默认值/有默认值 insert不插入username字段 均不报错 2014年07月23日21:05 百科369 MySQL为数据表的指定字段插入数据 ...
最新文章
- 通用兄弟元素选择器 E ~ F
- 最大后验估计_PR Ⅱ:贝叶斯估计/推断及其与MAP的区别
- Node跨域cors模块,nodejs+express跨域
- Linux神器strace的使用方法及实践
- token 微信access 过期_如何设计 QQ、微信等第三方账号登陆 ?以及设计数据库表!...
- 互联网浏览本地html,如何加载本地HTML文件,如果没有互联网连接
- php 防微信照片上传,PHP仿微信多图片预览上传功能
- 涂鸦板制作教程——其中的重做和撤消我觉得不错
- .net平台下的手机在线wap网站模拟器(附源代码)
- selenium自动化看网课
- Redis学习记录(菜鸟教程学习)
- 单片机原理及接口技术第1章
- 为什么大厂程序员的另一半全职太太比例特别多?
- 淘宝app搜索排名优化技巧
- 什么是十六进制法_什么是十六进制-十六进制详解-嗨客网
- 第一个用计算机编舞的人,多媒体平台·虚拟人·数字舞蹈
- 衣服挂牌 挂牌吊牌(麻绳,五彩绳,尼龙绳等)
- ramdisk和linux PE,[PE教程]WINPE下如何再建一个Ramdisk盘
- JS的变量,使用strict模式
- Git 派生属于自己的分支
热门文章
- html 点击增加样式,js点击添加css样式 css添加jq点击事件 JavaScript点击增加css样式...
- intel clear linux 教程,英特尔ClearLinux安装教程
- 工程伦理2019春季学堂学分课(慕课平台)(含期末考试答案)
- 重启网卡提示Bringing up interface eth0:
- updater-script 刷机脚本语法
- python3 copy和deepcopy
- RationalDMIS 7.1 状态区-测量设置
- 计算机毕业设计之微信小程序的快递取件及上门服务系统的论文
- 4位递增计数器的设计(详解并附有代码)
- 【mysql新加不了中文】Error Code: 1366. Incorrect string value: ‘\xE7\xBA\xB8\xE7\xB1\xBB‘ for colum