mysql 处理查询请求过程
需要搞清楚查询为什么会慢,就要搞清楚mysql处理查询请求的过程:
1.客户端发送SQL请求给服务器
2.服务器检查是否可以在查询缓存中命中该SQL
查询缓存对SQL性能的影响。
1.需要对缓存加锁。
2.表更新需要对缓存刷新。
对于读写频繁的系统使用查询缓存可能会降低查询的处理效率,在这种情况下不要使用查询缓存。
query_cache_type :设置查询是否可用
值为:on,off,demand 。
demand 表示只有在查询语句中使用SQL_CACHE和SQL_NO_CACHE 来控制是否需要缓存。
query_cache_size 设置查询缓存内存的大小
query_cache_limit 设置查询缓存可用出错的最大值,如果知道结果比较大可以在sql语句加上 SQL_NO_CAHCE提示字 不进行缓存,提高效率。
query_cache_wlock_invalidate 设置数据表被锁后是否返回缓存中的数据,默认是关闭的。
query_cache_min_res_unit 设置查询缓存分配的内存快的最小单位。
3.服务器端进行SQL解析,预处理,再由优化器生成对应的执行计划
这个阶段包括多个子过程:
解析SQL,预处理,优化SQL执行计划
3.1会造成MYSQL生成错误执行计划的原因:
1.统计信息不准确
2.执行计划中的成本估算不等于实际执行计划的成本。
mysql 服务器层不知道哪些页面在内存中,哪些在磁盘上,哪些需要顺序读取,哪些页面需要随机读取。
3.mysql优化器所认为的最优可能与你认为的最优不一样。mysql 是基于成本模型选择最优的执行计划。
4.mysql 不考虑其他并发查询,这可能会影响当前查询的速度。
5.mysql 有时也会基于一些固定的规则来生成执行计划。
6.mysql 不会考虑不受其控制的成本。
存储过程,用户自定义函数
3.2mysql 优化器可优化的SQL类型
1.重新定义表的关联顺序。
优化器会根据统计信息来决定表的关联顺序。
2. 将外链接转化成内连接
3.使用等价变换规则。
5=5 and a>5 改写为 a>5.
4.优化 count() ,min(),max()
5.子查询优化
6.提前终止查询
例如:
select * from user where 1!=1;
7.对IN条件进行优化。
4.根据执行计划,调用存储引擎API来查询数据。
5.将结果返回到客户端。
mysql 处理查询请求过程的更多相关文章
- mysql处理查询请求的步骤
服务端处理客户端的查询请求大致需要三个步骤: 连接管理 客户端连接服务端时,服务端会为其分配一个线程,客户端断开连接不会回收线程(避免频繁创建销毁的性能问题),服务端一直等待客户端发来消息(文本消息) ...
- Mysql慢查询日志过程
原创地址 :http://itlab.idcquan.com/linux/MYSQL/922126.html mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出代码实现中耗费资源的sql语句 ...
- mysql体系结构和sql查询执行过程简析
一: mysql体系结构 1)Connectors 不同语言与 SQL 的交互 2)Management Serveices & Utilities 系统管理和控制工具 备份和恢复的安全性,复 ...
- mysql数据库查询过程探究和优化建议
查询过程探究 我们先看一下向mysql发送一个查询请求时,mysql做了什么? 如上图所示,查询执行的过程大概可分为6个步骤: 客户端向MySQL服务器发送一条查询请求 服务器首先检查查询缓存,如果命 ...
- MySQL查询执行过程
MySQL查询执行路径 1. 客户端发送一条查询给服务器: 2. 服务器先会检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果.否则进入下一阶段: 3. 服务器端进行SQL解析.预处理,再由优 ...
- 如何查找MySQL中查询慢的SQL语句
如何查找MySQL中查询慢的SQL语句 更多 如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow ...
- TOMCAT原理详解及请求过程
Tomcat: Tomcat是一个JSP/Servlet容器.其作为Servlet容器,有三种工作模式:独立的Servlet容器.进程内的Servlet容器和进程外的Servlet容器. Tomcat ...
- TOMCAT原理详解及请求过程(转载)
转自https://www.cnblogs.com/hggen/p/6264475.html TOMCAT原理详解及请求过程 Tomcat: Tomcat是一个JSP/Servlet容器.其作为Ser ...
- 如何查找MySQL中查询慢的SQL语句(转载)
转载自https://www.cnblogs.com/qmfsun/p/4844472.html 如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那 ...
随机推荐
- C++之路进阶——codevs1362(网络扩容)
1362 网络扩容 省队选拔赛 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给定一张有向图,每条边都有一个容量 ...
- string.Format出现异常"输入的字符串格式有误"的解决方法
string.Format出现异常"输入的字符串格式有误"的解决方法 今天在做项目时,碰到一个很奇怪的问题,我使用string.Format居然报“输入的字符串格式有误”的错误,我 ...
- Django开发笔记之数据库的设计
后台采用Django开发,可以体会到开发的便利之处,对于一个项目来说,首先最重要的是数据库的设计,那么在Django下数据库设计主要是如下步骤: 1,需求分析,这点子不用多说,而我也深刻体会到了没有原 ...
- tomcat 内存溢出解决办法
- Entity Framework 第十篇 条件查询
业务类中 我们根据条件来动态的查询 创建IQueryable接口 public IQueryable<TEntity> GetQueryable() { IQueryable<TEn ...
- python 学习笔记十四 jQuery案例详解(进阶篇)
1.选择器和筛选器 案例1 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- [问题2015S05] 复旦高等代数 II(14级)每周一题(第六教学周)
[问题2015S05] 设 \(A\) 是 \(n\) 阶复方阵, 证明: \(A\) 可对角化的充分必要条件是 \(A\) 相似于某个如下的循环矩阵: \[C=\begin{pmatrix} a_ ...
- "Resuming debugger: error during debugging loop: TypeError: firstViewRangeElement is null"
翻译过来:“重启调试器:错误调试期间循环:TypeError:firstViewRangeElement为空” 写了一个项目,其中使用到了上传图片的插件,在本地上传图片一切正常,发布到服务器却不正常了 ...
- PHP-----类与对象,成员方法,成员属性,构造方法,析构方法
php里面的类-----class XX{},通过类的定义,可以使用调用类里面的成员属性和成员方法. 对象---一个类就是一个对象,一个对象可以有多个属性,一个类可以有多个成员方法. 构造方法:一个类 ...
- 安装openJDK 8
1.JDK 8 示例 (1.1)Debian, Ubuntu等使用下述安装命令: $ -jre ps : openjdk-8-jre 仅包含JRE,如果需要开发java程序,需要下载openjdk-8 ...