• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 对于mysql的query_cache认识的误区

对于mysql的query_cache认识的误区

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了mysql query cache,query cache size,query cache type,query cache,query cache limit等相关知识,希望本文的分享对您有所帮助
其实,这一种说法是不完全正确的。首先第一点,mysql的query_cache的键值并不是简单的query,而是query加databasename加flag。这个从源码中就可以看出。在这里不做重点描述,后续可以针对于这一点再具体分析。重要的是第二点,是不是加了空格,mysql就认为是不同的查询呢?实际上这个是要分情况而言的,要看这个空格加在哪。 如果空格是加在query之前,比如是在query的起始处加了空格,这样是丝毫不影响query cache的结果的,mysql认为这是一条query, 而如果空格是在query中,那会影响query cache的结果,mysql会认为是不同的query。

下面我们通过实验及源码具体分析。首先,我们先试验一下:

首先,我们看一下mysql query_cache的状态:

image

首先,我们可以确认,mysql的query_cache功能是打开的。

其次,我们看一下状态:

image

因为这个db是新的db,所以hits,inset都为0,现在我们执行一条select语句:

状态变为:

image

可以看到,执行一条select后,现在的qcache状态为,insert+1,这样我们就可以推断出,现在刚才那条select语句已经加入了qcache中。那我们现在再将刚才那条sql前面加上空格,看看会怎样呢?

image

请注意,这条sql,比刚才那条sql前面多了一个空格。

按照网上的理论,这条sql应该会作为另一个键而插入另一个cache,不会复用先前的cache,但结果呢?

image

我们可以看到,hits变为了1,而inserts根本没变,这就说明了,这条在前面加了空格的query命中了没有空格的query的结果集。从这,我们就可以得出结论,网上先前流传的说法,是不严谨的。

那究竟是怎么回事呢?到底应该如何呢?为什么前面有空格的会命中了没有空格的query的结果集。其实,这些我们可以通过源码获得答案。

翻看下mysql的源码,我这翻看的是5.1的,在send_result_to_client(这个函数既是mysql调用query_cache的函数)这个函数里面有这样一段,这段代码,、

我们看下dispache_command这个方法,在这个方法里有这样一段:
</div>

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 对于mysql的query_cache认识的误区
  • Mysql优化调优中两个重要参数table_cache和key_buffer
  • MySQL高速缓存启动方法及参数详解(query_cache_size)
  • MySQL性能优化之table_cache配置参数浅析

相关文章

  • 2017-05-11MySQL复制表结构和内容到另一张表中的SQL语句
  • 2017-05-11MySQL Hash索引和B-Tree索引的区别
  • 2018-12-05sqlserver中操作主从关系表的sql语句
  • 2018-12-05浅谈Oracle数据库的建模与设计
  • 2018-12-05总结数据库设计的原则
  • 2017-05-11让MySQL数据库跑的更快 为数据减肥
  • 2018-12-05linux中mysql命令方式备份数据的问题的详解
  • 2018-12-05MySQL--数据开发经典与解决方案
  • 2017-05-11mysql 动态执行存储过程语句
  • 2018-12-05 高性能MySql进化论(一):数据类型的优化_上

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • mysql中将null值转换为0的语句
    • 如何强制删除或恢复SQLServer正在使用的数据库
    • 数据库数据对比自动生成sql教程分享
    • SQL2008中SQL应用之- 死锁(Deadlocking)
    • ORA-02283: 无法变更启动序列号
    • sqlserver中向表中插入多行数据的insert语句
    • mysql innodb 异常修复过程实例
    • UDP传输时IP层的分片是怎么回事?
    • 一个优化MySQL查询操作的具体案例分析
    • 请问在mssql“SQL事件探查器”里表格的标题,如CPU,Read,Write

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有