MySQL数据库中缓存管理的思路解析

发表于:2012-1-11 10:08

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:水太深    来源:51Testing软件测试网采编

  在MySQL数据库中,用户可能多次执行相同的查询语句。为了提高查询效率,数据库会在内存在划分一个专门的区域,用来存放用户最近执行的查询,这块区域就是缓存。因为内存的运行速度要比硬盘快的多。为此通过缓存机制,就可以提高查询的效率。当用户下一次再执行相同查询时,就可以直接从缓存中获取数据,而不用到硬盘中的数据文件中去读取数据,也可以省去相关解析的工作

  一、数据缓存的应用环境

  并不是在任何情况下数据缓存都能够起到应有的效果。如果企业有一个不经常改变的表并且服务器受到这个表的大量的相同查询时,数据缓存才能够起到不错的效果。通常情况下,针对Web的应用,效果会比较明显。如现在在数据库中有一张产品信息表。企业的用户需要通过网页来查询产品的信息。如果在系统设计时,默认查询的结果是显示最近一个月交易过的产品信息。那么每次用户按默认情况查询产品信息时,将都会从缓存中获取信息(如果相关的信息没有被更新过)。此时系统查询的速度就会比较快。

  如果企业有一个不经常改变的表并且服务器受到这个表的大量的相同查询时,笔者就建议大家启用数据缓存机制。在启动之前,可以先使用命名(如上图所示)来查询现在系统缓存是否开启。如上图所示,如果查询的结果是YES的话,那么就说明系统中已经开启了数据缓存机制。

  二、数据缓存使用的限制

  并不是在任何情况下,数据缓存都会起到改善查询的效果。根据笔者的项目经验,认为在一下几种情况,数据缓存机制的效果并不会很大。

  一是查询所涉及到的表会经常更改。如在一个进销存管理系统中,可能会有产品与销售记录两张表格。产品表一般不怎么会更新,而销售记录表就可能每分钟都会发生变化。此时对于销售记录表来说,采用缓存机制就不会起到多大的效果。因为根据缓存的工作原理,当某个表被更改后,其对应的数据缓存的相关条目就会被清空。

  二是查询缓存不使用与服务器方便些的语句。根据B/S或者C/S架构,可以将相关应用分为服务器断和客户端两类。在使用数据缓存时,数据库管理员要考虑到,在MySQL数据库中,查询缓存并不适用于服务器方所编写的查询语句。当数据库管理员正在使用服务器方编写的语句时,要注意到这些语句并不会应用缓存技术。

  三是查询时使用缓存的两个基本条件:所采用的查询语句完全一样以及相关数据表妹欧发生更改。对于后面一条,上面已经谈到过。这里笔者要说的是,什么叫做查询语句瓦圈一样?简单的说,就是前后使用的两条查询语句(不一定要连在一起)完全一致。不仅包括查询的字段,也包括查询的条件。在这里要认识到一个误区。如果在5分钟之前用户查询一个产品信息表,其没有用到任何查询条件,查询全部的产品信息记录。5分钟之后又有一个用户查询产品信息表,此时其使用了查询条件,如只查询最近一个月新建的产品信息。显然此时后面一个查询的结果是前面一个查询结果的子集(不考虑产品基本表在这个时间间隔中是否做了更改)。照理来说应该可以使用数据缓存。但是这里需要注意,此时前后两条查询语句,其是不相同的(其查询条件不同)。即使结果是相同的,或者具有包含关系,数据库仍然会先重新解析SQL语句,然后从硬盘上的数据文件中去获取数据。

  另外需要注意的是如果用户在查询语句中,使用了自定义函数、自定义变量或者因引用了系统数据库中的表,那么缓存机制也会失效。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号