dat文本导入mysql_mysql学习笔记(九) 增删改查的优化

一、大批量插入数据当使用load命令导入数据的时候,可以适当的提高导入的速度。对于myisam存储引擎的表可以通过下述方法快速的导入大量的数据。
Alter table tablename disable keys;Loading dateAlter table tabename enable keys;
其中disable keys和enable keys用来打开或者关闭myisam表非唯一索引的更新。在导入大量的数据到一个非空的myisam表的时候,通过设置这两个命令可以提高导入的效率。对于当如大量的数据到一个空的myisam表,默认就是先导入数据然后才创建索引的,所以不用进行设置。通过对比发现其有六倍的速率变化。
Load data infile  ‘/home/data/file.sql’ into table film;Alter table file disable keys;Load data infile ‘/home/data/file.sql’ into table film;Alter table file enable keys;
上边是对myisam表进行数据导入时的优化方法,对于innodb类型的表,这种方式不能提高导入数据的效率,但是可以通过下面几种方式提高innodb表的导入效率。(1)因为innodb类型的表是按照主键的顺序保存的,所以将要导入的表的数据按照主键的顺序排列,可以有效的提高导入数据的效率。类如text3.sql是按照表的主键顺序存储的,那么导入共耗时27.8秒。而没有任何顺序的文本存储居然要耗时31.16秒。(2)在导入数据前执行set unique_check=0,关闭唯一性校验,在导入结束后执行set unique=1,恢复唯一性校验,可以提高导入的效率。(3)如果应用使用自动提交的方式,建议在导入前执行set autocommit=0,关闭自动提交,导入结束之后再执行set autocommit=1,打开自动提交,这样也可以提高导入的效率。二、优化insert语句当进行数据的insert的时候,可以考虑采用以下几种优化方式。如果同时从同一客户插入很多行,应该尽量使用多个值表的insert语句。这种方式将大大缩减客户端与数据库之间的关联,关闭等的消耗。使得效率比分开执行单个insert语句要快。
Insert into test value(1,2),(2,3),(3,4),....
如果从不同的客户端插入很多行,可以通过insert delayed语句得到更高的速度,delayed的含义是让insert语句马上执行,其实数据被放到内存的队列中,并没有真正的写入磁盘,这比每条语句分别插入要快的多;low priority刚好相反,在所有用户对表的读写完成之后才进行插入。将索引文件和数据文件分在不同的磁盘上存储如果进行批量插入,可以通过bulk_insert_buffer_size变量值的方法来提高速度,但是这只能对myisam表使用。当从一个文本文件装载到一个表时,使用load data infile。这通常比使用很多insert语句快20倍。三、优化order by语句大家都知道order by在某些情况下order by是不支持排序的,但是如果将待排序的字段设置成为索引,而且该索引还有顺序,那么就可以在排序的时候快速一些。在mysql中将不能直接通过索引排序,而是要通过返回值进行排序操作的排序叫做filesort排序,filesort并不代表通过磁盘文件进行排序,而只是说进行了排序操作,至于排序操作是否使用磁盘文件或者零时表等,择取决于mysql服务器对排序参数的设置和需要排序的数据大小。例如,按照商店store_id排序返回所有客户记录时,出现了对全表扫描的结果排序。Filesort是通过相应的排序算法,将取得的数据在sort_buffer_size系统变量设置的内存排序区中进行排序,如果内存装载不下,他就会将磁盘上的数据进行分片。再对各个数据块进行排序,如果内存装载不下,它将在磁盘上的数据进行分块,再对各个数据块进行排序,然后将各个块合并成有序的结果集。Sort_buffer_size设置的排序区是每个线程独有的,所以同一时刻mysql中会存在多个sort buffer排序区。在我们了解了mysql排序方式下,优化的目标就清晰了,尽量减少额外的排序,通过索引直接返回有序数据,where条件和order by使用相同的索引,并且order by的顺序和索引顺序相同,并且order by的字段都是升序或者都是降序。否则肯定会有额外的排序操作,就会出现filesort。Filesort的优化通过创建合适的索引能够减少filesort的出现,但是在某些情况下,条件限制不能出现让filesort消失,那就需要想办法加快filesort的操作,对于filesort来说,mysql有两种排序算法。分别为两次扫描算法和一次扫描算法。两次扫描首先通过条件取出排序字段和行指针信息,然后在sort buffer中排序,如果sort buffer不够,则在临时表temporary table中存储排序结果,完成排序之后根据行指针回表读取记录。因为需要访问两次数据,第一次获取排序字段和行指针信息,第二次根据行指针获取记录,尤其是第二次读取操作可能导致大量的io操作,优点是排序的时候内存开销较小。一次扫描是一次性取出满足条件的行的所有字段,然后在排序区sort buffer中排序后直接输出结果集,排序的时候内存开销比较大,但是排序的效率要比两次扫描高。Mysql通过比较系统变量max_length_for_sort_data的大小和Query语句取出字段总大小判断使用哪种排序算法,如果max_length_for_sort_data更大,那么使用第二种优化之后的算法,否则采用第一种。所以适当的修改max_length_for_data的值能够让mysql选择更优化的filesort排序算法。当然,假如max_length_for_data设置的过大,会造成mysql利用率过低和磁盘IO过高,所以平衡很重要。适当的加大sort_buffer_size排序区,尽量让排序在内存中完成,而不是通过创建零时表放到文件中进行,当然也不能无限加到sort_buffer_size排序区,因为sort_buffer_size参数是每个线程独占的,设置的过高。也会导致服务器swap严重,要考虑数据库活动连接数和服务器内存的大小来适当的设置。尽量使用必要的字段,select具体的字段名称,而不是select * 选择所有字段,这样可以减少排序区域的使用。提高sql的性能。

f5babad8741dcbf7abbfab86ecf54eb2.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472926.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp.net接受表单验证格式后再提交数据_如何解析 el-form-renderer 表单渲染器1.14.0...

DEEPEXI 大前端常人道,一入开发深似海,技术学习无止境。在新技术层出不穷的前端开发领域,有一群身怀绝技的开发,他们在钻研前沿技术的同时,也不忘分享他们的成果,回馈社区。下面,就由小水滴带大…

LeetCode 1751. 最多可以参加的会议数目 II(DP + 二分查找)

文章目录1. 题目2. 解题1. 题目 给你一个 events 数组,其中 events[i] [startDayi, endDayi, valuei] ,表示第 i 个会议在 startDayi 天开始,第 endDayi 天结束,如果你参加这个会议,你能得到价值 valuei 。 同时给你…

LeetCode 992. K 个不同整数的子数组(双指针)

文章目录1. 题目2. 解题1. 题目 给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定独立的子数组为好子数组。 (例如,[1,2,3,1,2] 中有 3 个不同的整数:1,2&a…

压缩可以卸载吗_番禺街坊注意!微信发送高清大文件不压缩,网友:QQ可以卸载了?...

刚上新了表情包的微信又双叒叕出新功能了这次的功能有点实用昨天,腾讯微信团队宣布微信已支持向朋友发送高清视频和图片且不会被压缩微信用户点击对话框右下角的号右滑点击文件在上方选择手机相册就能选择用户想要发送的视频和图片了目前通过「文件」方式发送的内容…

LeetCode 1755. 最接近目标值的子序列和(状态枚举 + 双指针)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums 和一个目标值 goal 。 你需要从 nums 中选出一个子序列,使子序列元素总和最接近 goal 。 也就是说,如果子序列元素和为 sum ,你需要 最小化绝对差 abs(sum - goal) 。 返回 abs(sum …

路由器距离向量算法计算举例_路由器基本原理是什么 路由器基本发展情况介绍【图文】...

PLC路由器原理和ARR路由器基本原理要实现网络中通信节点彼此之间的通信,首先必须给每个节点分配一个唯一的IP地址。路由器应该至少有两个网络端口,分别连接LAN或者WAN子网上,每个端口必须具有一个唯一的IP地址,并且要求与所连接IP…

LintCode MySQL 1918. 第二高的球员的身高

文章目录1. 题目2. 解题1. 题目 编写一个 SQL 语句,获取球员 (players) 表中第二高的身高 (height) 表定义: players (球员表) https://www.lintcode.com/problem/1918 2. 解题 if(a,b,c), a true,执行 b, 否则 c -- Write your SQL Que…

python中使用opencv_如何在Python中使用OpenCV Stitcher类?

你正确使用它,因为某些原因导致进程失败. 结果元组的第一个值是错误代码,0表示成功.这里你得到1,这意味着,根据stitching.hpp,这个过程需要更多的图像. enum Status { OK 0, ERR_NEED_MORE_IMGS 1, ERR_HOMOGRAPHY_EST_FAIL 2, ERR_CAMERA_PARAMS_ADJUST_FAIL 3 }; ERR_NEE…

《高可用MySQL》2 – 单机版MySQL主从配置

这里搭建的主从是最简单的单一主从复制(即一个Master和一个slave,没有任何的热机备份和多slave),该主从结构的基本拓扑图如下所示: 建立基本的主从复制可以总结为以下三个基本步骤: 配置master服务器配置sl…

LintCode MySQL 1936. 张三的故事 III

文章目录1. 题目2. 解题1. 题目 记者调查发现,张三所在学校还有一金牌教师,其所带的学生毕业后人均知名学府。 记者对该老师所教的学生的情况产生了好奇。 students 表中记录了学生的姓名以及班级 (class_id),classes 表中记录了班级的名称以…

语言4位bcd码怎么加加_S7300400如何使用SCL语言调用SFC1(READ_CLK)读取日期和时间?...

系统功能 SFC1 用于读取 CPU 的系统时钟。系统时钟存储在数据类型为DATE_AND_TIME的变量里。通过指针访问系统时钟的单个组成元素。数据类型DATE_AND_TIME所包含的关于年、月、日、时等信息是以 BCD 码的格式存储在 8 个字节里。该数据类型显示的范围是:DT#1990-1-1…

LintCode MySQL 1932/1933. 挂科最多的同学 I / II

文章目录1. 题目2. 解题1. 题目 exams 表中存放着同学们的考试记录 请用 SQL 语句,找到挂科数最多的同学所对应的 student_id https://www.lintcode.com/problem/1932 2. 解题 -- Write your SQL Query here -- -- example: SELECT * FROM XX_TABLE WHERE XXX…

python 画三角函数_python,将三角函数绘制成二维数组

看起来a, b, c是常量&#xff0c;z是a和{}之间的np.linspace。在a 1 b 2 c 3 def triangle (z, a a, b b, c c): y np.zeros(z.shape) y[z < a] 0 y[z > c] 0 first_half np.logical_and(a < z, z < b) y[first_half] (z[first_half]-a) / (b-a) second…

LeetCode 1758. 生成交替二进制字符串的最少操作数(DP)

文章目录1. 题目2. 解题1. 题目 给你一个仅由字符 ‘0’ 和 ‘1’ 组成的字符串 s 。 一步操作中&#xff0c;你可以将任一 ‘0’ 变成 ‘1’ &#xff0c;或者将 ‘1’ 变成 ‘0’ 。 交替字符串 定义为&#xff1a;如果字符串中不存在相邻两个字符相等的情况&#xff0c;那…

python内置的集成开发工具是什么_python内置的集成开发工具是什么_后端开发

go语言之goroute协程_后端开发 协程&#xff08;coroutine&#xff09;是Go语言中的轻量级线程实现&#xff0c;由Go运行时&#xff08;runtime&#xff09;管理。下面就来由go入门教程栏目介绍一下go语言中的goroute协程。python内置的集成开发工具是什么 Python自带的集成开发…

SQL Server 2008R2数据库文件导入到SQL Server 2008数据库中

最近&#xff0c;电脑重装系统之后&#xff0c;安装了SQL Server 2008。附加数据库文件的时候&#xff0c;发现无法附加&#xff0c;提示版本不对。想起来&#xff0c;原来的数据库版本是SQL Server 2008R2。低版本的数据库管理工具无法兼容高版本的数据库文件&#xff0c;所以…

python语言的注释语句引导符_Python 为什么用 # 号作注释符?

关于编程语言中的注释&#xff0c;其重要性基本上已为大家所共识。 然而关于注释的规范&#xff0c;这个话题就像我们之前聊过的缩进、终止符和命名方式一样&#xff0c;众口难调。 注释符通常可分为两种&#xff0c;即行注释与块注释&#xff08;inline/block&#xff09;&…

python 白化_MeteoInfo和Python显著性检验

MeteoInfo显著性检验&#xff1a;MeteoInfo官网&#xff1a;http://www.meteothink.org源代码&#xff1a;https://github.com/meteoinfofn F:/RMeteoInfo/data/test.txtny 71nx 144m ny * nxn 62ss1 asciiread(fn, shape(71,144,n))ss1 ss1[::-1,::1,:]X ss1.reshape(…

LeetCode 1760. 袋子里最少数目的球(二分查找)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums &#xff0c;其中 nums[i] 表示第 i 个袋子里球的数目。同时给你一个整数 maxOperations 。 你可以进行如下操作至多 maxOperations 次&#xff1a; 选择任意一个袋子&#xff0c;并将袋子里的球分到 2 个新的袋子中&a…

判断鼠标不在控件上_VB常用控件属性讲解单选按钮、复选框总结

1单选按钮、复选框做为VB编程中的选择性控件&#xff0c;在实际程序中有着广泛的应用&#xff0c;所以熟练掌握其特殊属性的用法就很重要了&#xff01;单选按钮、复选框的实际应用图复选框(CheckBox)控件属性说明Name复选框控件的名称Alignment设置标题文本的对齐方式, 取值为…