MySQL server 有一个重要的特征:查询缓存(Query Cache)。 当在使用中,查询缓存会存储一个 SELECT 查询的文本与被传送到客

户端的相应结果。如果之后接收到一个同样的查询,服务器将从查询缓存中检索结果,而不是再次分析和执行这个同样的查询。因而查询

需要严格的一致(字节对字节的),才会被认为是同样的。 另外,如果一个客户端使用一个新的连接协议格式或不同于其它客户端的另一个

字符集,一个查询将被视为不同的。

在某些表并不经常更改,而你又对它执行大量的相同查询时,查询缓存将是非常有用的。对于许多 WEB 服务器使用大量的动态信息,这

是一个很典型的情况。

如果一个表发生的改变 (INSERT, UPDATE, DELETE, TRUNCATE, ALTER 或 DROP TABLE|DATABASE),那么所有这张表使用的缓冲的

查询(可能通过一个 MRG_MyISAM 表!)将被得失效,并从缓冲中移除。

InnoDB 表的事务所做的更改将在一个 COMMIT 被完成时,使数据失效。

所以查询缓存绝不返回过期数据。当数据被修改后,在查询缓存中的任何相关词条均被转储清除。

MySQL server 有一个重要的特征:查询缓存(Query Cache)。 当在使用中,查询缓存会存储一个 SELECT 查询的文本与被传送到客户端的相应结果。如果之后接收到一个同样的查询,服务器将从查询缓存中检索结果,而不是再次分析和执行这个同样的查询。因而查询需要严格的一致(字节对字节的),才会被认为是同样的。 另外,如果一个客户端使用一个新的连接协议格式或不同于其它客户端的另一个字符集,一个查询将被视为不同的。

在某些表并不经常更改,而你又对它执行大量的相同查询时,查询缓存将是非常有用的。对于许多 WEB 服务器使用大量的动态信息,这是一个很典型的情况。

如果一个表发生的改变 (INSERT, UPDATE, DELETE, TRUNCATE, ALTER 或 DROP TABLE|DATABASE),那么所有这张表使用的缓冲的查询(可能通过一个 MRG_MyISAM 表!)将被得失效,并从缓冲中移除。

InnoDB 表的事务所做的更改将在一个 COMMIT 被完成时,使数据失效。

所以查询缓存绝不返回过期数据。当数据被修改后,在查询缓存中的任何相关词条均被转储清除。

打开查询缓存,是通过几个步骤来设置的。

第一: query_cache_type 使用查询缓存的方式

默认值:ON.

mysql> select @@query_cache_type;

+——————–+

| @@query_cache_type |

+——————–+

| ON |

+——————–+

这样 当我们执行 select id,name from tableName; 这样就会用到查询缓存。

在 query_cache_type 打开的情况下,如果你不想使用缓存,需要指明

select sql_no_cache id,name from tableName;

当然也可以禁用查询缓存: mysql> set session query_cache_type=off;

第二: 系统变量 have_query_cache 设置查询缓存是否可用

mysql> show variables like ‘have_query_cache’;

+——————+——-+

| Variable_name | Value |

+——————+——-+

| have_query_cache | YES |

+——————+——-+

上面的显示,表示设置查询缓存是可用的。

第三: 系统变量 query_cache_size

表示查询缓存大小,也就是分配内存大小给查询缓存,如果你分配大小为0,那么 第一步 和 第二步 起不到作用,还是没有任何效果。

mysql> select @@global.query_cache_size;

+—————————+

| @@global.query_cache_size |

+—————————+

| 16777216 |

+—————————+

上面是 mysql6.0设置默认的,之前的版本好像默认是0的,那么就要自己设置下。设置 set @@global.query_cache_size=1000000; 这里是设置1M左右,900多K。再次查看下 select @@global.query_cache_size;

+—————————+

| @@global.query_cache_size |

+—————————+

| 999424 |

+—————————+

显示我们设置新的大小,表示设置成功。如果你设置的查询缓存大小为了0,这和没有允许没什么区别

第四: query_cache_limit 控制缓存查询结果的最大值

例如: 如果查询结果很大, 也缓存????这个明显是不可能的。

MySql 可以设置一个最大的缓存值,当你查询缓存数结果数据超过这个值就不会

进行缓存。缺省为1M,也就是超过了1M查询结果就不会缓存。

mysql> select @@global.query_cache_limit;

+—————————-+

| @@global.query_cache_limit |

+—————————-+

| 1048576 |

+—————————-+

这个是默认的数值,如果需要修改,就像设置缓存大小一样设置,使用set重新指定大小。

如果你想测试并查看查询缓存效果:

执行同样的查询语句后,用如下命令查看下查询缓存信息

show status like ‘qcache%’

其他几个状态变量的意义:

Qcache_free_memory    表示查询缓存区现在还有多少的可用内存

Qcache_hits        表示查询缓存区的命中个数,也就是直接从查询缓存区作出响应处理的查询个数

Qcache_inserts    表示查询缓存区此前总过缓存过多少条查询命令的结果

Qcache_lowmem_prunes   表示查询缓存区已满而从其中溢出和删除的查询结果的个数

Qcache_not_cached    表示没有进入查询缓存区的查询命令个数

Qcache_queries_in_cache 查询缓存区当前缓存着多少条查询命令的结果

php mysql 查询缓存_mysql 查询缓存使用详解相关推荐

  1. mysql事务实战_mysql事务隔离级别详解和实战

    A事务做了操作 没有提交 对B事务来说 就等于没做 获取的都是之前的数据 但是 在A事务中查询的话 查到的都是操作之后的数据 没有提交的数据只有自己看得到,并没有update到数据库. 查看InnoD ...

  2. mysql source 数据库_MySQL 数据库 source 命令详解及实例

    MySQL 数据库 source 命令详解及实例 MySQL 数据库 source 命令,该命令是数据库导入命令.source 命令的用法非常简单,首先你需要进入 MySQL 数据库的命令行管理界面, ...

  3. mysql decimal 类型_MySQL数据类型DECIMAL用法详解

    MySQLDECIMAL数据类型用于在数据库中存储精确的数值.我们经常将DECIMAL数据类型用于保留准确精确度的列,例如会计系统中的货币数据. 要定义数据类型为DECIMAL的列,请使用以下语法: ...

  4. explain mysql怎么用_mysql中explain用法详解

    EXPLAIN用于SELECT语句中的每个表返回一行信息.表以它们在处理查询过程中将被MySQL读入的顺序被列出 如果在select语句前放上关键词explain,mysql将解释它如何处理selec ...

  5. mysql配置文件完全_MySQL配置文件my.cnf详解

    以下是Mysql数据库服务器配置文件/etc/my.cnf的详细配置.应用场合是InnoDB引擎,4核CPU, 32位SUSE. [client] port= 3306 socket= /tmp/my ...

  6. mysql修改字符集_MySQL修改字符集步骤详解

    在实际应用中,如果一开始没有正确的设置字符集,在运行一段时间以后,才发现当前字符集不能满足要求,需要进行调整,但又不想丢弃这段时间的数据,这个时候就需要修改字符集. 在<MySQL设置默认字符集 ...

  7. mysql grant 数据库_MySQL的Grant命令详解

    本文实例,运行于 MySQL 5.0 及以上版本. MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删 ...

  8. mysql数据库导出_MySQL数据库导入导出详解[转发]

    1. 概述 MySQL数据库的导入,有两种方法: 1) 先导出数据库SQL脚本,再导入: 2) 直接拷贝数据库目录和文件. 在不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况 ...

  9. mysql 字符串解析_MySQL 动态字符串处理详解

    MySQL中,常常会看到一些关于动态字符串的处理,列如:DYNAMIC_STRING. 为了记录动态字符串的实际长度,缓冲区的最大长度,以及每次字符串需要调整时,及时分配新的内存,以及调整长度.MyS ...

  10. mysql 双机备份_mysql双机热备详解及延伸备份

    开门见山,首先,主服务器的mysql版本不能高于从服务器的版本 ,可以是一样的,其次端口号必须统一. 好了,现在开始配置双机热备(随后将会提到循环备份以及互备)我使用的版本为redhat5.4两台ip ...

最新文章

  1. 使用C++实现一套简单的状态机模型——实例
  2. java如何捕获多个异常_是否可以在单个catch块中捕获多个Java异常?
  3. codeforces438 D. The Child and Sequence
  4. 开始JBoss BPM流程的3种基本方法
  5. 【探索测试篇】探索无界,BUG无限,让程序猿头疼的测试技术
  6. 华为云数据库携新品惊艳亮相2019华为全联接大会
  7. 让Python更加充分的使用Sqlite3
  8. 统计学基础知识(一)
  9. 超好用的数学教学软件:几何画板Sketchpad for Mac中文版
  10. GAMES101-现代计算机图形学入门-闫令琪 - lecture11 几何3(Geometry 3) - 课后笔记
  11. bootstrap之双日历时间段选择控件—daterangepicker
  12. springboot集成Swagger3.0
  13. mysql查询周数_MySQL如何获取一个指定日期所对应本年度的周数(WEEK函数)呢?
  14. 算术,逻辑左移右移(转)
  15. 从此,清华不再「唯论文数」!校长邱勇:大学不能把学术权力,交给期刊编辑和审稿人...
  16. (转)软件版本中的Alpha,Beta,RC,Trial是什么意思?
  17. 工业网关作为数据采集、数据转发的重要设备,如何服务与工业互联网
  18. 计算机辅助设计没交作业,计算机辅助设计作业要求
  19. 一行代码实现网页整体变成黑白色
  20. windows Server 2012 R2安装 “vc_redist.x64.exe“ 报错

热门文章

  1. prim算法 求最小生成树
  2. FastDFS文件服务器安装
  3. Phoenix 关联查询异常 , MaxServerCacheSizeExceededException phoenix.query.maxServerCacheBytes
  4. Snowflake如日中天是否代表Hadoop已死?大数据体系到底是什么?
  5. 一针一线皆关“云” 报喜鸟以匠心融合科技
  6. 【双11】阿里云边缘节点ENS助力淘宝构建音视频通信网络
  7. 阿里巴巴高级技术专家至简:聊工程师思维
  8. 专注数据,打造阿里云Elasticsearch“一站式”数据服务体系
  9. 亚信安全发布2021年挖矿病毒专题报告,聚焦挖矿病毒进化与治理
  10. 云网一体,“湘遇湘融 | 移动云TeaTalk·长沙站 启动倒计时