需要搞清楚查询为什么会慢,就要搞清楚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 处理查询请求过程的更多相关文章

  1. mysql处理查询请求的步骤

    服务端处理客户端的查询请求大致需要三个步骤: 连接管理 客户端连接服务端时,服务端会为其分配一个线程,客户端断开连接不会回收线程(避免频繁创建销毁的性能问题),服务端一直等待客户端发来消息(文本消息) ...

  2. Mysql慢查询日志过程

    原创地址 :http://itlab.idcquan.com/linux/MYSQL/922126.html mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出代码实现中耗费资源的sql语句 ...

  3. mysql体系结构和sql查询执行过程简析

    一: mysql体系结构 1)Connectors 不同语言与 SQL 的交互 2)Management Serveices & Utilities 系统管理和控制工具 备份和恢复的安全性,复 ...

  4. mysql数据库查询过程探究和优化建议

    查询过程探究 我们先看一下向mysql发送一个查询请求时,mysql做了什么? 如上图所示,查询执行的过程大概可分为6个步骤: 客户端向MySQL服务器发送一条查询请求 服务器首先检查查询缓存,如果命 ...

  5. MySQL查询执行过程

    MySQL查询执行路径 1. 客户端发送一条查询给服务器: 2. 服务器先会检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果.否则进入下一阶段: 3. 服务器端进行SQL解析.预处理,再由优 ...

  6. 如何查找MySQL中查询慢的SQL语句

    如何查找MySQL中查询慢的SQL语句 更多 如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow ...

  7. TOMCAT原理详解及请求过程

    Tomcat: Tomcat是一个JSP/Servlet容器.其作为Servlet容器,有三种工作模式:独立的Servlet容器.进程内的Servlet容器和进程外的Servlet容器. Tomcat ...

  8. TOMCAT原理详解及请求过程(转载)

    转自https://www.cnblogs.com/hggen/p/6264475.html TOMCAT原理详解及请求过程 Tomcat: Tomcat是一个JSP/Servlet容器.其作为Ser ...

  9. 如何查找MySQL中查询慢的SQL语句(转载)

    转载自https://www.cnblogs.com/qmfsun/p/4844472.html 如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那 ...

随机推荐

  1. android stutio 快捷键

    [F] [F] F2 在错误代码之间切换 F3 往前定位(Shift + F3:往后定位 )有问题 F4\Ctrl+鼠标点击\Ctrl+B 转到定义,查看类继承关系 F5 但不调试进入函数内部. F6 ...

  2. Bitnami redmine备份升级步骤

    从3.2.1升级至3.3.0,不确定数据库结构是否有变化,主要过程:先停止服务,安装redmine模块,恢复服务. 以下适用于windows操作系统,采用Bitnami安装方式: 1.完整备份 Fol ...

  3. Android 网络请求库volley的封装,让请求更方便

    首先封装一下volley 请求 public class CustomRequest extends StringRequest { private static final String TAG = ...

  4. 【转】 Tomcat v7.0 Server at localhost was unable to start within 45

    转载地址:http://www.jsjtt.com/java/JavaWebkaifa/58.html Starting Tomcat v7.0 Server at localhost' has en ...

  5. dbutils中实现数据的增删改查的方法,反射常用的方法,绝对路径的写法(杂记)

    jsp的三个指令为:page,include,taglib... 建立一个jsp文件,建立起绝对路径,使用时,其他jsp文件导入即可 导入方法:<%@ include file="/c ...

  6. 第四章 函数(JavaScript:语言精粹)

    函数包含一组语句,用来指定对象的行为,其代码可以用来重复使用.   一般来说,编程就是将一组需求分解成一组函数和数据结构的技能.   概览:函数对象 | 函数字面量 | 调用 | 方法调用模式 | 函 ...

  7. Python数据分析之numpy学习

    Python模块中的numpy,这是一个处理数组的强大模块,而该模块也是其他数据分析模块(如pandas和scipy)的核心. 接下面将从这5个方面来介绍numpy模块的内容: 1)数组的创建 2)有 ...

  8. len字符串的长度

    #!/usr/bin/env python def fun4(x) : if len(x) > 2 : return print(x[0],x[1]) else: return 0 d = (' ...

  9. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序使用异步及存储过程

    这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第九篇:为ASP.NET MVC应用程序 ...

  10. SQL疑难杂症【4 】大量数据查询的时候避免子查询

    前几天发现系统变得很慢,在Profiler里面发现有的SQL执行了几十秒才返回结果,当时的SQL如下: 可以看得出来,在652行用了子查询,恰巧目标表(QS_WIP)中的记录数为100000000+, ...