1 时间到底花在哪了? mysql在执行查询的时候需要执行一系列的子任务,这些子任务包含了整个查询周期最重要的阶段,这其中包含了大量为了 检索数据列到存储引擎的调用以及调用后的数据处理,包括排序、分组等。在完成这些任务的时候,查询需要在不同的地方 花费时间,包括网络、cpu计算、生成统计信息和执行计划、锁等待等。尤其是向底层存储引擎检索数据的调用操作。这些调用需要在内存操作、 cpu操作和内存不足时导致的IO操作上消耗时间,很可能还会因为存储引擎的不同,产生大量的上下文切换以及系统调用。 在每一个消耗大量时间的查询案例中,我们都能看到一些不必要的额外操作、某些操作被额外的重复了很多次, 某些操作执行的太慢等。优化查询的目的就是减少和消除这些操作所花费的时间。 查询新能低下的最基本原因是访问的数据太多。对于低效的查询,我们可以通过下面两个步骤来分析总是很有效。 1 确认应用程序是否在检索大量超过需要的数据。这通常意味着访问了太多的行,但是有时候也可能是访问了太多的咧。 2 确认mysql服务器是否在分析大量超过需要的数据行。 最常见的错误是,先使用select语句查询大量的结果,然后获取前面的n行后关闭结果集,他们认为mysql 会执行查询,并只返回给他们10条记录然后停止查询。实际情况是mysql会查询出全部的结果集,客户端也会接受全部的结果集, 然后抛弃其中的大部分数据。这种思想给mysql服务器带来了额外的负担,并增加网络开销,另外也会消耗应用服务器的cpu和内存资源。 最简单有效的解决办法是在这样的查询后面加上limit. 2 重构查询的方式 1 一个复杂查询还是多个简单查询 将大查询分为更小的查询 2 切分查询 一次性删除100万数据,将会锁住很多数据、沾满整个事务日志、耗尽系统资源、阻塞很多小但是很重要的查询。 可以将这部分查询分割成很多小的操作,并且不在 3 分解关联查询 很多join的联合查询当然没有分部执行的小查询速度更快。这里有太多的原因,从客户端程序到mysql服务器。 3 查询执行的基础 当希望mysql能够以更高的性能运行查询时,最好的办法就是弄清楚mysql是如何优化和执行查询的。一旦理解了这一点,很多查询 优化工作实际上就是遵循一些原则让优化器能够按照预想的合理的方式运行。 4 查询缓存 在解析一个查询时,如果查询缓存是打开的,mysql会优先检查是否命中查询缓存中的数据。 如果命中缓存,查询不会被解析,不用生成执行计划,不会被执行。 5 查询优化处理 查询的生命周期的下一步是将一个sql转换成一个执行计划,mysql再按照这个执行计划和存储引擎交互。这个阶段包括解析sql/ 预处理、优化sql执行计划。 mysql 使用基于成本的优化器,她将尝试预测一个查询使用某种执行计划时的成本,并选择其中成本最小的一个。 例子:select sql_no_cache count(*) from table; 6 mysql 能够处理的优化类型 1 重新定义关联表的顺序 数据表的关联并不总是按照在查询中指定的顺序进行。决定关联的顺序是优化器很重要的一部分功能。 2 将外连接转化为内连接 并不是所有的outer join 语句都必须以外连接的方式执行。很多因素例如where条件、库表结构都可能让外连接等价于一个内连接。 mysql能够识别并重写查询。 3 使用等价变换规则 mysql可以使用一些等价变换来简化并规范表达式。他可以合并和减少一些比较,还可以移除一些恒成立和恒不成立的判断。 4 优化count() min() max() 索引和列是否为空通常可以帮助mysql优化这类表达式。例如,要找到某一列的最小值,只需要查询 对应B-tree索引最左端的记录,MySQL可以直接获取索引的第一条记录。在优化器生成执行计划的时候 就可以利用这一点,在B-Tree索引中,优化器将会把这个表达式作为一个常数对待。类似的,如果要查找一个最大值, 也只需读取B-Tree索引的最后一条记录。如果MySQL使用了这种类型的优化,那么在explain中就可以看到 "select tables optimized away". 从字面意思可以看出,他表示优化器已经从执行计划中移除了该表,并 以一个常数取而代之。 5 预估并转化为常数表达式 MySQL检测到一个表达式可以转化为常数的时候,就会一直把该表达式作为常数进行优化处理。 在优化阶段,有时候甚至能把一个查询也能够转化为一个常数。一个例子是在索引列上执行 min函数。甚至主键或者唯一键查找语句也可以转换为常数。如果where子句中使用了该类索引的常数条件, MySQL可以在查询开始阶段就先查找到这些值,这样优化器就能够知道并转换为常数表达式。 6 索引覆盖扫描 当索引当中的列包含所有查询中需要使用的列的时候,MySQL就可以使用索引返回需要的数据,而无需 查询对应的数据行。 7 子查询优化 8 提前终止查询 典型应用是limit,其他事条件不满足或者错误。 9 等值传播 例如 select film.film_id from film inner join film_acter using(film_id) where film.film_id >500; mysql 在这里使用film_id 进行等值关联,mysql知道where子句中film_id不仅适用于film 而且适用于film_acter; 10 in()列表比较 在mysql中,mysql会先排序in列表中的数据,然后使用二分查找来判断列表中的数据是否符合要求,复杂度在O(logn) 所以in列表中有大量取值的时候,mysql处理的速度将会更快。mysql在在这一点不同于其他数据库,其他数据库是使用OR 关联in列表当中的取值。 优化器所做的工作远远不止上面这些,优化器还会做大量的其他工作,智能化和复杂性远远难以想象。 千万不要自以为自己比优化器要更聪明,这一点一定要记住。 7 mysql如何执行关联查询 mysql对于关联的理解不局限于表与表之间,每一个查询、每一个片段、甚至是单表的select操作都可能被mysql看做关联。 所以理解mysql如何执行关联查询至关重要。 mysql优化器会不是根据关联的顺序来判断最优执行计划而是根据需要读取的数据页来预估最优的执行计划。 关联查询都会生成查询计划树,MySQL不会生成平衡查询计划树,而是生成嵌套查询计划树,MySQL的计划树通常是 左侧深度优先的树,MySQL会遍历每一张表然后逐个做嵌套循环计算每一棵可能的计划树,采用嵌套和回溯操作 不过如果有超过n个表的关联,那么需要检查n的阶层种关联顺序。假如有10张表关联,那么共有3628800种 不同的关联顺序,所以必须控制表的关联规模。 我们可以查看last_query_cost来检查关联成本。 8 排序优化 无论如何排序都是一个成本很高的操作,所以从性能角度考虑,应尽可能避免排序或者尽可能避免对大量数据进行 排序。数据量较小的时候,mysql会在内存中完成排序,数据量较大需要使用磁盘,mysql将这个过程统一称为文件排序,即使完全使用内存排序 也是如此。如果避免不了排序,则尽可能的利用索引排序。 在内存中排序的时候,如果内存不够,mysql会先将数据分块,然后对每个独立的块进行快速排序,并将每个块的排序结果放在磁盘上,然后将 各个排好序的块进行merge,最后返回排序结果。 mysql 排序有两种算法:两次传输排序和单次传输排序 由于两次传输排序存在于旧版本,所以这里只讨论单次传输排序。 其操作思想是 先读取查询所需要的所有列,然后再根据给定列进行排序,最后直接返回排序结果。相对于两次传输排序,这个算法只需要一次顺序IO 读取所有的数据 而无需任何的随机IO。 mysql在进行文件排序时所需要的临时存储空间可能比想象的要大很多,原因在于mysql在排序时,对每一个排序记录都会分配一个足够长的定长空间来存放。 这个定长空间足以容纳其中最长的字符,例如varchar 列,mysql会分配器完整长度。 mysql5.6版本做了很多改进,当只需要返回部分排序结果的时候,例如使用了limit子句,mysql不再对所有的结果进行排序,而是根据实际情况,选择 抛弃不需要的数据,再对结果进行排序。
请尊重知识,请尊重原创 更多资料参考请见 http://www.cezuwang.com/listFilm?page=1&areaId=906&filmTypeId=1
相关推荐
光伏风电混合并网系统Simulink仿真模型:光伏发电与风力发电的协同控制与并网逆变器设计,光伏风电混合并网系统simulink仿真模型。 系统有光伏发电系统、风力发电系统、负载、逆变器lcl大电网构成。 光伏系统采用扰动观察法实现mppt控制,经过boost电路并入母线; 风机采用最佳叶尖速比实现mppt控制,通过三相电压型pwm变器整流并入母线; 并网逆变器VSR采用基于电网电压定向矢量控制双闭环,经过lcl滤波器并入大电网。 ,核心关键词: 1. 光伏风电混合并网系统 2. Simulink仿真模型 3. 光伏发电系统 4. 风力发电系统 5. 负载 6. 逆变器LCL大电网 7. MPPT控制 8. 扰动观察法 9. Boost电路 10. 最佳叶尖速比 11. 三相电压型PWM变换器 12. VSR电网电压定向矢量控制双闭环 13. LCL滤波器 以上关键词用分号分隔为: 光伏风电混合并网系统;Simulink仿真模型;光伏发电系统;风力发电系统;负载;逆变器LCL大电网;MPPT控制;扰动观察法;Boost电路;最佳叶尖速比
DXP元器件库,初学者有用
2025专业技术人员继续教育公需课题库(附含答案).pptx
C++编写的资产管理系统(带SQLServer数据库文件。)。
Simulink下的MATLAB平台在智能电网微网运行控制中的并网仿真与逆变器控制策略探讨,Simulink:智能电网微网运行控制仿真及其参考资料 关键词:微电网 运行控制 仿真平台:MATLAB 主要内容:并网仿真 逆变器控制 下垂控制 ,关键词:微电网; 运行控制; Simulink仿真; MATLAB; 并网仿真; 逆变器控制; 下垂控制; 智能电网微网。,"Simulink在MATLAB平台下的微电网运行控制仿真研究及资料整合"
Matlab中的HMM隐马尔科夫与Markov马尔科夫时间序列预测源代码及数据集(可运行,适用于单变量预测),HMM隐马尔科夫时间序列预测 Markov马尔科夫时间序列预测(Matlab) 1.所有程序经过验证,保证可以运行 2.程序包括源码(主程序一个,子函数两个)和数据集; 3.程序适用于单变量时间序列预测。 注意:HMMP为主程序、data为数据集,其余m文件为函数文件,运行主文件HMMP即可。 ,HMM隐马尔科夫模型; 时间序列预测; Matlab程序; 验证可用; 主程序; 函数文件; 单变量预测; 包含源码与数据集。,"HMM与马尔科夫模型结合的时间序列预测程序(Matlab)验证版"
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat
python学习练习游戏案例,详细备注解释代码,最适合初学者,练手学习,资源已上传欢迎下载学习
三菱FX系列自由口通讯程序详解:FX3U-232BD与上位机通讯及PLC与触摸屏应用,三菱FX自由口通讯程序 三菱FX系列自由口通讯程序 利用FX3U-232BD与上位机自由口通讯, 有PLC程序和触摸屏程序,通过连接三根线即可通讯 具有很好的学习意义和借鉴价值。 ,核心关键词:三菱FX系列; 自由口通讯程序; FX3U-232BD; 上位机; PLC程序; 触摸屏程序; 三线连接; 学习意义; 借鉴价值。,三菱FX系列自由口通讯程序:简易编程与实用连接指南
1990-2022年各省份基尼系数
Python自动化办公源码-60 pandas-matplotlib
MATLAB下的模型预测控制在楼宇负荷需求响应中的研究与应用:结合热力学与舒适度考量,MATLAB代码:基于模型预测控制的楼宇负荷需求响应研究 关键词:楼宇负荷 空调 模型预测控制 需求响应 参考文档:《Model Predictive Control of Thermal Storage for Demand Response》完全复现 仿真平台:MATLAB+CVX平台 主要内容:代码主要做的是一个建筑楼宇的需求响应问题,首先利用楼宇的储热特性,结合热力学方程构建了其储热模型,其次,考虑在动态能量电价的引导下,对楼宇负荷进行需求侧管理,从而能够对其负荷曲线进行改善,在需求响应的过程中也考虑了用户的舒适度,相对来讲比较全面,模型的求解采用的是较为创新的模型预测控制算法,更加创新,而且求解的效果更好,店主已经对代码进行了深入的加工和处理,出图效果非常好,代码质量非常高 ,关键词:楼宇负荷; 空调; 模型预测控制; 需求响应; 储热模型; 动态能量电价; 舒适度; MATLAB代码; CVX平台; 深入处理。,基于MATLAB的模型预测控制研究:楼宇负荷需求响应管理与优化
Prius 2004永磁同步电机设计报告:从理论到实践——磁路法、Maxwell仿真建模与温升分析,Prius2004永磁同步电机设计报告: 磁路法、maxwell有限元法、MotorCAD温仿真、应力分析。 (内容比较完善,用于很需要的朋友,不支持讲解,等额外服务哈。 ) 内容:: 1.Excell设计程序,可以了解这个电机是怎么设计出来的,已知功率转矩等,计算电机的体积,叠厚,匝数等。 2.Maxwell参数化仿真模型:可以学习参数化仿真模型,有限元结果可查看。 3. 橡树岭拆解和实测数据:官方的实测数据和差拆解报告。 4.maxwell prius2004建模仿真教程等:ppt资料一步一步教学怎么去建模 5.温升仿真分析,提供motor cad模型 ,磁路法; Maxwell有限元法; MotorCAD温仿真; 应力分析; Excell设计程序; Maxwell参数化仿真模型; 橡树岭拆解实测数据; Maxwelli Prius 2004建模仿真教程; 温升仿真分析; Motor CAD模型。,2004款Prius永磁同步电机设计报告:Excell程序与Maxwell有限元法融
基于Voronoi理论的维修站点选址算法研究.pdf
料箱输送线程序:PLC设备布局图及电气图纸集成系统(包含MultiControl控制卡等,采用STL开发,仅供学习参考),料箱输送线程序,带目的地跟踪,提供设备布局图和电气图纸以及博途程序。 程序语言较多使用了STL,程序仅供学习参考。 硬件配置:PLC:1515-2 PN HMI:TP700 Confort 主要设备有:英特诺直流辊筒电机,控制卡MultiControl;条码阅读器Sick CLV620; 和MiniLoad堆垛机通过Anybus模块通讯;称重模块品牌碧彩BIZERBA;还有使用丹佛斯变频器的提升机。 ,料箱输送线程序; 目的地跟踪; 设备布局图; 电气图纸; 博途程序; STL语言; PLC硬件配置; 英特诺直流辊筒电机; 控制卡MultiControl; 条码阅读器Sick CLV620; Anybus模块通讯; 称重模块碧彩BIZERBA; 丹佛斯变频器提升机。,"多设备集成:带目的地跟踪的料箱输送线博途程序"
1、资源内容地址:https://blog.csdn.net/2301_79696294/article/details/144634074 2、数据特点:今年全新,手工精心整理,放心引用,数据来自权威,且标注《数据来源》,相对于其他人的控制变量数据准确很多,适合写论文做实证用 ,不会出现数据造假问题 3、适用对象:大学生,本科生,研究生小白可用,容易上手!!! 4、课程引用: 经济学,地理学,城市规划与城市研究,公共政策与管理,社会学,商业与管理
2025网络安全法竞赛题题库及参考答案.pptx
CAN总线在小电流接地故障检测中的应用.pdf
三菱步进电机驱动器控制定位案例:触摸屏PLC程序实现正反转、原点回归及急停报警功能详解,三菱步进电机驱动器控制的定位案例,带有触摸屏程序,plc程序 程序功能实现正反转控制,原点回归,急停报警等 触摸屏有报警显示,故障历史这些常用的画面设置,对控制多轴运动很有帮助,值得去学习一下 ,核心关键词:三菱步进电机驱动器;定位控制;触摸屏程序;PLC程序;正反转控制;原点回归;急停报警;报警显示;故障历史;多轴运动控制。,"三菱步进电机驱动:触摸屏PLC程序化控制多轴定位系统"
2025最新工业机器人考试题库及答案.doc