zoukankan      html  css  js  c++  java
  • MySQL查询缓存

    查询缓存存储sql语句和对应的发送给客户端的结果。执行相同的sql语句时,mysql server会直接从查询缓存中检索结果,不再需要对sql语句进行解析和执行。查询缓存在session之间是可以共享的。

    查询缓存适用于表修改不是很频繁,频繁执行相同查询的环境。不适合表经常更新的表。

    查询缓存不会存过期的数据。当表被修改后,查询缓存中的数据会被刷出。

    在MySQL 5.6.5中,查询缓存不支持分区表,涉及到分区表的查询时会自动取消查询缓存功能。

    查询缓存的工作原理

    在解析sql语句前,会将客户端发送的sql请求跟查询缓存中的sql进行比较。以下两个sql语句在查询缓存中是不同的:

    select * from tab1_name;

    SELECT * FROM TAB1_NAME;

    必须是相同的sql语句。此外,由于其他原因,sql查询字符串相同也可能会被当做不同的sql语句。查询不同的数据库、使用不同的协议版本、或者不同的字符集时,相同的sql语句也会被单独缓存。

    查询缓存不适用以下场景:

    -外查询的子查询

    -function、trigger或event内部的查询

    查询缓存被命中后,会将Qcache_hits的值进行自增。

    如果表发生了变化,比如执行了insert, update, delete, truncate table, alter table, drop table, o或drop database操作,所有缓存的查询结果都会变得无效,并被移出查询缓存。
    对视图的查询也会被缓存。

    SQL语句开启/取消查询缓存功能:

    SELECT SQL_CACHE id, name FROM customer; 	#"SQL_CACHE"使用查询缓存
    SELECT SQL_NO_CACHE id, name FROM customer;	#"SQL_NO_CACHE"不使用查询缓存
    

    查看mysql server查询缓存是否可用:

    mysql> show variables like 'have_query_cache';
    +------------------+-------+
    | Variable_name    | Value |
    +------------------+-------+
    | have_query_cache | YES   |
    +------------------+-------+
    

    关闭查询缓存:建议把查询缓存关闭掉,有个全局锁效率不高

    query_cache_type = 0
    query_cache_size = 0
    

    设置查询缓存时,query_cache_size的值不得小于40k(用于分配自身结构)

    mysql> set global query_cache_size=4000;
    Query OK, 0 rows affected, 2 warnings (0.00 sec)
    
    mysql> show  warningsG
    *************************** 1. row ***************************
      Level: Warning
       Code: 1292
    Message: Truncated incorrect query_cache_size value: '4000'
    *************************** 2. row ***************************
      Level: Warning
       Code: 1282
    Message: Query cache failed to set size 3072; new query cache size is 0
    2 rows in set (0.00 sec)
    
    mysql> 
    
  • 相关阅读:
    Yii CGridView 之 SQL 语句
    Yii的srbac拓展中“用户已经获授权项”无法查看
    MyBatis通过注解实现映射中的嵌套语句和嵌套结果
    MyBatis一对多映射简单查询案例(嵌套结果)
    MyBatis绑定Mapper接口参数到Mapper映射文件sql语句参数
    将前端请求中的数据绑定到Spring MVC响应方法中参数的四种方法
    MyBatis一对多映射简单查询案例(嵌套Mapper映射文件中的sql语句)
    Spring MVC与html页面的交互(以传递json数据为例)
    使用Spring JDBC连接数据库(以SQL Server为例)
    spring mvc访问html页面404报错解决
  • 原文地址:https://www.cnblogs.com/abclife/p/5172895.html
Copyright © 2011-2022 走看看