sql执行过程

概述
当向Mysql服务器发送查询请求时,MySQl执行过程如下:

1、客户端发送一个连接请求给服务器。
2、服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果,否则进入下一阶段。(如果是更新sql,会把之前的查询缓存置为失效状态)
3、服务器端进行SQL解析、预处理(是否语法错误,关键字等)。
4、查询优化器对查询进行优化并生成对应的执行计划(索引选择等)。
5、MySQL根据优化器生成的执行计划,再调用存储引擎的API来执行查询。
(查询缓存生成redo日志undo日志,
执行引擎写binlog,提交事务)
6、将结果返回给客户端。

mysql执行计划:
在这里插入图片描述

解析:该sql涉及三个表,dau表上命中PRIMARY(主键)索引,扫描行数1,
darc命中dig_user_id_index(自建普通索引)索引,darc2同darc,其中rows是mysql做查询时预估的扫描数量,理论上数量越少越好,我们要做的就是减少该值!

查询缓存需要手动开启:
在配置文件中加上(query_cache_type=1或query_cache_type=on)
例如:vi /etc/mysql/mysql.conf.d/mysqld.cnf,然后重启mysql(service mysql restart)
在这里插入图片描述

查询缓存是否开启(show variables like ‘%query%’; )
在这里插入图片描述

测试是否生效:
第一次查询时间:2.83s
在这里插入图片描述

第二次查询:0s
在这里插入图片描述
参数说明:
query_cache_type:是否打开查询缓存。可以设置为OFF、ON和DEMAND。DEMAND表示只有在查询语句中明确写明SQL_CACHE的语句才会放入查询缓存。
query_cache_size:查询缓存使用的总内存空间。
query_cache_min_res_unit:在查询缓存中分配内存块时的最小单元。较小的该值可以减少碎片导致的内存空间浪费,但是会导致更频繁的内存块操作。
query_cache_limit:MySQL能够查询的最大查询结果。如果查询结果大于这个值,则不会被缓存。因为查询缓存在数据生成的时候就开始尝试缓存数据,所以当结果全部返回后,MySQL才知道查询结果是否超出限制。超出之后,才会将结果从查询缓存中删除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值