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

债券收益率预测模型_利率预测模型系列之二:利率预测模型带来的启示

利率预测模型带来的启示在《利率预测模型系列之一:简单的N-S 模型运用》中,我们对收益率曲线预测模型进行了简单介绍,该模型能够给我们提供较好的利率及收益率曲线预测效果。当然,在理论上,还有更多更复杂的利率预测模…

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

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

SemEval-2010任务8:成对名词之间的语义关系的多分类

摘要SemEval-2任务8专注于名词对之间语义关系的多分类。 该任务旨在比较语义关系分类的不同方法,并为将来的研究提供标准的测试平台。 本文定义了任务,描述了训练和测试数据及其创建过程,列出了参与的系统(10个团队,28…

tomcat GET 编码疑惑

本机开发环境 Windows tomcat eclipse 测试运行环境 Linux tomcat 大部分人知道,客户端GET方式提交的数据,tomcat默认按 iso-8859-1 处理。POST 方式 UTF-8。 今天遇到了GET也是默认按照UTF-8处理的情况,但是并未对tomcat的server.xml做过处理…

python恶搞代码打开对方摄像头_用Python获取摄像头并实时控制人脸的实现示例

实现流程 从摄像头获取视频流,并转换为一帧一帧的图像,然后将图像信息传递给opencv这个工具库处理,返回灰度图像(就像你使用本地静态图片一样) 程序启动后,根据监听器信息,使用一个while循环&am…

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

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

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

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

从一个视图控制器切换到另一个视图控制器的几种方式

从一个视图控制器切换到另一个视图控制器的几种方式1,模态(modal)画面的显示方法:例如iphone通讯录管理程序中,追加新的通讯纪录时,就是使用这种模态画面例:点击一个按钮,进入另一个界面- (IBAction)pressAbout:(id)se…

python暂停和恢复_python – 暂停和恢复QThread

我正在尝试暂停QThread并恢复它. 所以,我在QThread中有一个RFID读取循环,我想在阅读器获得RFID代码时暂停无限循环.之后,有一个数据库检查.在检查结束时,我想恢复RFID阅读循环以获取其他代码. MVCE: def main(): global Thread app QtGui.QApplication(sys.argv) m…

date format 精辟讲解

link: http://stackoverflow.com/questions/19533933/nsdateformatter-how-to-convert-wed-23-oct-2013-045615-gmt-to-local-time转载于:https://www.cnblogs.com/ouyangfang/p/4028508.html

python怎么给画布填上颜色_python numpy matplotlib画小方块填充背景色和添加不同色彩的文字...

需要根据不同的数值生成不同色彩的小方块,并标明数值,考虑到各种色彩的方块,如果采用文字采用黑色或者白色总是避免不了和背景色重复,所以把数值转化成rgb(0x11,0xf0,0x3b)类似的值,然后文字采用rgb(255-0x11,255-0xf0…

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

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

python简单实践作业答案_python入门实践四:爬取牛客网面试专项练习题及答案

说明:个人练手python用。操作系统:window10 x64IDE:Pycharm 2017.2.2Python版本:3.6.2目标牛客网是一个IT笔试面试的平台,提供了很多题库,今天我们使用python爬取其中的Java专项练习库。步骤1、接口抓取:如…

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

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

Git 常用命令整理(持续更新)

#配置 git config --global user.name "Your Name" git config --global user.email "emailexample.com" #注意git config命令的--global参数,用了这个参数,表示这台机器上所有的Git仓库都会使用这个配置,当然也可以对某…

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…

matlab多种分配方案_基于MATLAB的水资源优化分配问题动态规划解法

基于MATLAB的水资源优化分配问题动态规划解法摘要:介绍了动态规划的基本原理,针对水资源分配问题进行了动态规划方法分析。针对具体问题采用逆序解法的表格法进行了计算,然后用matlab编制了相应的计算程序进行计算,避免了繁琐的人…

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…