深度解析MySQL查询缓存机制

MySQL查询缓存机制是MySQL数据库中的重要机制之一,下面将为您深入分析MySQL查询缓存机制,供您参考学习之用。

MySQL缓存机制简单的说就是缓存sql文本及查询结果,如果运行相同的sql,服务器直接从缓存中取到结果,而不需要再去解析和执行sql。如果表更改 了,那么使用这个表的所有缓冲查询将不再有效,查询缓存值的相关条目被清空。更改指的是表中任何数据或是结构的改变,包括INSERT、UPDATE、 DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE等,也包括那些映射到改变了的表的使用MERGE表的查询。显然,这对于频繁更新的表,查询缓存是不适合的,而对于一些不常改变数据且有 大量相同sql查询的表,查询缓存会节约很大的性能。

查询必须是完全相同的(逐字节相同)才能够被认为是相同的。另外,同样的查询字符串由于其它原因可能认为是不同的。使用不同的数据库、不同的协议版本或者不同 默认字符集的查询被认为是不同的查询并且分别进行缓存。

下面sql查询缓存认为是不同的:

  1. SELECT * FROM tbl_name  
  2. Select * from tbl_name  

查询缓存相关参数

  1. mysql> SHOW VARIABLES LIKE '%query_cache%';  
  2. +------------------------------+---------+  
  3. | Variable_name                | Value   |  
  4. +------------------------------+---------+  
  5. | have_query_cache             | YES     | --查询缓存是否可用  
  6. | query_cache_limit            | 1048576 | --可缓存具体查询结果的最大值  
  7. | query_cache_min_res_unit     | 4096    |   
  8. | query_cache_size             | 599040  | --查询缓存的大小  
  9. | query_cache_type             | ON      | --阻止或是支持查询缓存  
  10. | query_cache_wlock_invalidate | OFF     |   
  11. +------------------------------+---------+  

下面是一个简单的MySQL查询缓存机制例子:

  1. [mysql@csdba1850 ~]$ mysql -u root -p  
  2. Enter password:   
  3. Welcome to the MySQL monitor.  Commands end with ; or \g.  
  4. Your MySQL connection id is 3  
  5. Server version: 5.0.45-community MySQL Community Edition (GPL)  
  6.  
  7. Type 'help;' or '\h' for help. Type '\c' to clear the buffer.  
  8.  
  9. mysql> set global query_cache_size = 600000; --设置缓存内存  
  10. Query OK, 0 rows affected (0.00 sec)  
  11.  
  12. mysql> set session query_cache_type = ON; --开启查询缓存  
  13. Query OK, 0 rows affected (0.00 sec)  
  14.  
  15. mysql> use test  
  16. Reading table information for completion of table and column names  
  17. You can turn off this feature to get a quicker startup with -A  
  18.  
  19. Database changed  
  20. mysql> show tables;  
  21. +----------------+  
  22. | Tables_in_test |  
  23. +----------------+  
  24. | animals        |   
  25. | person         |   
  26. +----------------+  
  27. 5 rows in set (0.00 sec)  
  28.  
  29. mysql> select count(*) from animals;  
  30. +----------+  
  31. | count(*) |  
  32. +----------+  
  33. |        6 |   
  34. +----------+  
  35. 1 row in set (0.00 sec)  
  36.  
  37. --Qcache_hits表示sql查询在缓存中命中的累计次数,是累加值。  
  38. mysql> SHOW STATUS LIKE 'Qcache_hits';  
  39. +---------------+-------+  
  40. | Variable_name | Value |  
  41. +---------------+-------+  
  42. | Qcache_hits   | 0     |  --0次  
  43. +---------------+-------+  
  44. 8 rows in set (0.00 sec)  
  45.  
  46. mysql>  select count(*) from animals;  
  47. +----------+  
  48. | count(*) |  
  49. +----------+  
  50. |        6 |   
  51. +----------+  
  52. 1 row in set (0.00 sec)  
  53.  
  54. mysql>  SHOW STATUS LIKE 'Qcache%';  
  55. +---------------+-------+  
  56. | Variable_name | Value |  
  57. +---------------+-------+  
  58. | Qcache_hits   | 1     | --表示sql在缓存中直接得到结果,不需要再去解析  
  59. +---------------+-------+  
  60. 8 rows in set (0.00 sec)  
  61.  
  62. mysql> select count(*) from animals;  
  63. +----------+  
  64. | count(*) |  
  65. +----------+  
  66. |        6 |   
  67. +----------+  
  68. 1 row in set (0.00 sec)  
  69.  
  70. mysql> select count(*) from animals;  
  71. +----------+  
  72. | count(*) |  
  73. +----------+  
  74. |        6 |   
  75. +----------+  
  76. 1 row in set (0.00 sec)  
  77.  
  78. mysql> SHOW STATUS LIKE 'Qcache_hits';  
  79. +---------------+-------+  
  80. | Variable_name | Value |  
  81. +---------------+-------+  
  82. | Qcache_hits   | 3     |    --上面的sql也是是从缓存中直接取到结果  
  83. +---------------+-------+  
  84. 1 row in set (0.00 sec)  
  85.  
  86. mysql> insert into animals select 9,'testsds' ; --插入数据后,跟这个表所有相关的sql缓存就会被清空掉  
  87. Query OK, 1 row affected (0.00 sec)  
  88. Records: 1  Duplicates: 0  Warnings: 0  
  89.  
  90. mysql> select count(*) from animals;  
  91. +----------+  
  92. | count(*) |  
  93. +----------+  
  94. |        7 |   
  95. +----------+  
  96. 1 row in set (0.00 sec)  
  97.  
  98. mysql> SHOW STATUS LIKE 'Qcache_hits';  
  99. +---------------+-------+  
  100. | Variable_name | Value |  
  101. +---------------+-------+  
  102. | Qcache_hits   | 3    |  --还是等于3,说明上一条sql是没有直接从缓存中直接得到的  
  103. +---------------+-------+  
  104. 1 row in set (0.00 sec)  
  105.  
  106. mysql> select count(*) from animals;  
  107. +----------+  
  108. | count(*) |  
  109. +----------+  
  110. |        7 |   
  111. +----------+  
  112. 1 row in set (0.00 sec)  
  113.  
  114. mysql> SHOW STATUS LIKE 'Qcache_hits';   
  115. +---------------+-------+  
  116. | Variable_name | Value |  
  117. +---------------+-------+  
  118. | Qcache_hits   | 4     |   
  119. +---------------+-------+  
  120. 1 row in set (0.00 sec)  

 

 

 

【编辑推荐】

MySQL无重复查询的实现

五种常用的MySQL命令行

修复mysql表的两种方法

php中数组插入mysql表的方法

MySQL条件查询语句的用法

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/230113.html<

(0)
管理的头像管理
上一篇2025-04-19 02:12
下一篇 2025-04-19 02:13

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注