zoukankan      html  css  js  c++  java
  • 【mysql】八、mysql的学习---查询缓存

    mysql的学习

    资料来源 https://www.bilibili.com/video/BV1CZ4y1M7MQ?from=search&seid=3518646188262100291

    一、索引:【mysql】一、mysql的学习---索引

    二、视图:【mysql】二、mysql的学习---视图

    三、存储过程和函数:【mysql】三、mysql的学习---存储过程和函数

    四、触发器:【mysql】四、mysql的学习---触发器

    五、存储引擎:【mysql】五、mysql的学习---存储引擎

    六、SQL优化:【mysql】六、mysql的学习---SQL优化

    七、应用优化:【mysql】七、mysql的学习---应用优化

    八、查询缓存:【mysql】八、mysql的学习---查询缓存

    九、内存优化:【mysql】九、mysql的学习---内存优化

    十、Mysql并发参数调整和锁: 【mysql】十、mysql的学习---Mysql并发参数调整和锁

    十一、常用的SQL技巧:【mysql】十一、mysql的学习---常用的sql技巧

    本篇文章主要介绍 查询缓存 的相关知识

    1. 概述

    -- 开启Mysql的查询缓存,当执行完全相同的sql语句的时候,服务器就会直接从缓存中读取结果,当数据被修改,之前的缓存会失效,修改比较频繁的表不适合做查询缓存。

    2. 操作流程

    -- 1. 客户端发送一条查询给服务器。
    -- 2. 服务器先会检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果。否则进入下一阶段。
    -- 3. 服务器端进行sql解析、预处理,再由优化器生成对应的执行计划。
    -- 4. mysql根据优化器生成的执行计划,调用存储引擎的API来执行查询。
    -- 5. 将结果返回给客户端。

     

    3. 查询缓存配置

    -- 1.查看当前的mysql数据库是否支持查询缓存:
    show variables like 'have_query_cache';

    -- 2.查看当前mysql是否开启了查询缓存:
    show variables like 'query_cache_type';

    -- 3.查看查询缓存的占用大小:  可以扩展 但是最好是1024的倍数 ,比如图中的1048576 = 1024*1024*1 即1M
    show variables like 'query_cache_size';

    -- 4.查看查询缓存的状态变量:
    show status like 'Qcache%'

    4. 开启查询缓存

    -- mysql的查询缓存默认是关闭的,需要手动配置参数query_cache_type,来开启查询缓存。query_cache_type该参数的可取值有三个:

    -- 在/usr/my.cnf配置中,增加以下配置:query_cache_type=1
    
    -- 配置完毕之后,重启服务即可生效;然后就可以在命令行执行sql语句进行验证,执行一条比较耗时的sql语句,然后再多执行几次,查看后面几次的执行时间;获取通过查看查询缓存的缓存命中数,来判定是否走查询缓存。

    5. 查询缓存select选项

    -- 可以在select语句中指定两个与查询缓存相关的选项:
    -- SQL_CACHE:如果查询结果是可缓存的,并且query_cache_type系统变量的值为on或demand,则缓存查询结果。
    -- SQL_NO_CACHE:服务器不使用查询缓存。它既不检查查询缓存,也不检查结果是否已缓存,也不缓存查询结果。
    -- 例子:
    
    select SQL_CACHE id,name from customer;
    
    select SQL_NO_CACHE id,name from customer;

    6. 查询缓存失效的情况

    -- 1.sql语句不一致的情况,要想命中查询缓存,查询的sql语句必须一致
    sql1: select count(*) from user;
    sql2: Select count(*) from user;
    -- 2.当查询语句中有一些不确定的时,则不会缓存。如:now(),current_date(),curdate(),rand(),uuid()等
    sql1:select * from user where uptime < now() limit 1;
    sql2:select user();
    sql3:select database();
    -- 3.不使用任何表查询语句
    select 'A';
    -- 4.查询mysql,infomation_schema或performance_schema数据库中的表时,不会走查询缓存
    select * from infomation_schema.engines;
    -- 5.在存储函数,触发器或者事件的主体内执行的查询
    -- 6.如果表更改,则使用该表的所有高速缓存查询都将变为无效并从高速缓存中删除。这包括使用merge映射到已更改表的表的查询。一个表可以被许多类型的语句,如被改变insert、update、delete、truncate table、alter table、drop table、drop database

    持续更新!!!

  • 相关阅读:
    数论数论函数基础知识
    KMP入门和简单运用
    高斯消元入门
    FFT和NTT
    AC自动机入门和简单应用
    后缀自动机入门
    线段树优化建图的速成
    爱情九十七课,降低期待
    爱情九十二课,说出你的弱
    爱情八十六课,等得不是爱情
  • 原文地址:https://www.cnblogs.com/flyinghome/p/14722865.html
Copyright © 2011-2022 走看看