【摘 要】MySQL 是一种开放源代码的关系型数据库管理系统,MySQL数据库系统使用最常用的数据库管理语言,即结构化查询语言进行数据库管理。缓存管理是对于文件数据在内存中的特殊管理,基于内存管理,向文件系统提供服务。而在内存管理器将缓存页面真正写入磁盘时,又调用文件系统的接口然后走磁盘设备驱动。本章将介绍基于MySQL数据库中缓存管理等知识。

【关键词】MySQL;缓存;查询

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

1.数据管理的应用

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

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

只有当数据库里已经有了足够多的测试数据时,它的性能测试结果才有实际参考价值。如果在测试数据库里只有几百条数据记录,它们往往在执行完第一条查询命令之后就被全部加载到内存里。

2. 使用数据管理的方式

并不是在任何情况下,数据管理都会起到改善查询的效果。在以下几种情况,数据管理机制的效果并不会很大。

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

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

三是查询时使用缓存的两个基本条件:所采用的查询语句完全一致。不仅包括查询的字段,也包括查询的条件。如果用户查询一个产品信息表,使用了查询条件,只查询最近一个月新建的产品信息。显然此时查询的结果是查询的子集,应该可以使用数据管理。数据库仍然会先重新解析SQL语句,然后从硬盘上的数据文件中去获取数据。

数据类型的大小也会影响到基础表的大小。如对于MEDIUMINT和INT两个数据类型,其都可以用来保存整数型的数据,只是其能够保存的精度不同而已。

用户在查询语句中,使用了自定义函数、自定义变量或者因引用了系统数据库中的表,那么缓存机制可能会失效。

3.提高数据管理的使用效率

通过数据库的合理设计,可以提高缓存的使用效率,扩大缓存的使用领域。具体的说,数据库管理员可以从如下几个方面出发。

⑴根据数据变化的频率来分解表

如现在有产品基本资料与产品最新库存两部分内容。在不考虑缓存的情况下,可以将产品基本资料与产品库存放在同一个表中,然后通过其他作业来更新这个库存数量。如此的话,在前台界面中,就可以直观的反映出产品的库存数量。但是从缓存的设计角度来看,这么操作并不是很合理。因为产品信息相对来说不怎么会变化,而库存数量却经常在发生变化。如果将他们放在同一张表上,由于库存数量的不断更新,数据管理中的内容就会不断被清空(与产品信息表相关的数据管理)。此时如果很多用户要查询产品的描述、规格(他们可能并不关注产品的库存),那么他们就无法使用数据管理。因为缓存中没有相关的数据(由于库存数量不断变化而被清空)。

遇到这种情况时,数据库管理员就可以将库存数量与产品基本信息存放在两张不同的表上,然后通过关键字来进行关联。这么做的好处就是库存数量更新并不会影响到产品基本信息表所对应的数据管理(他们是两张表)。从而提高产品信息查询时的缓存命中率。

⑵采用默认条件的查询

在上面的分析中笔者谈到,要两条完全相同的SQL语句才能够使用缓存。条件不同或者使用的字段不同,数据库系统都不会使用缓存来进行查询优化。

采用默认条件的查询来提高缓存命中率。如在设计产品信息查询这个功能,可以考虑默认查询全部信息或者指定某个固定的条件。如此就可以提高缓存的命中率。而不要在不同的用户界面设置不同的默认值。某些应用系统,为了提高界面的友好性,会给用户提供一些个性化设置的参数,以保存用户的个性化内容。此时虽然可以提高界面的人性化,但是显然会降低数据管理的命中率。遇到这种情况时,数据库管理员就需要在人性化设计与系统的查询性能之间进行均衡。

不同的应用针对同一个表格的相同查询,其查询语句最好相同。如现在对于产品信息,即可以通过产品信息窗口进行查询,也可以根据报表来查询。此时其对应的后台表格是相同的。只要其执行的查询语句相同、并且在这段时间之内数据库表格没有发生变化,那么系统就可以从缓存中获取数据。在实际工作中,窗体与报表往往是有不同的人设计与开发的。不同的用户之间要统一SQL语句的书写规范。项目管理员要根据实际情况来制定相关的规则。

⑶提高缓存空间大小来提高数据库的缓存使用率

当数据管理满时,新的数据会覆盖旧的数据。在这种情况下,即使查询的语句相同、表格也没有发生变化,数据库系统仍然要从硬盘上的数据文件中去获取数据,所以,应该增加服务器上缓存的空间。

总之,MySQL提供了TCP/IP、ODBC和JDBC等多种数据库连接途径,提供用于管理、检查、优化数据库操作的管理工具。利用MySQL技术可以很好地对系统的缓存进行管理,提高了查询的效率,提高缓存的使用率,灵活的缓存可以说不仅大大减轻了服务器的压力,而且因为更快速的用户体验而方便了用户。

参考文献:

[1]《php+mysql完全学习手册》黄桂金,清华大学出版社,2008-6.

[2]《mysql高效编程》王志刚,人民邮电出版社,2012-1.

[3]《php+mysql动态网站开发指南》杨智宇,科学出版社,2008-6.

作者简介:

李亚鹏(1970-),男,汉族,吉林省公主岭市人,副教授,研究方向:计算机软件和硬件的教学、研制以及开发工作。

mysql研究内容_基于MySQL数据库的数据管理的研究相关推荐

  1. mysql geohash函数_基于MySQL实现按距离排序、范围查找geoHash

    简介 现在几乎所有的O2O应用中都会存在"按范围搜素.离我最近.显示距离"等等类似的功能,那这样的功能是怎么实现的呢?本文提供了基于MySQL的实现方式,同样适用于其它数据库.本文 ...

  2. Mysql sequence使用_基于Mysql的Sequence实现

    团队更换新框架.新的业务全部使用新的框架,甚至是新的数据库--Mysql. 这边之前一直是使用oracle,各种订单号.流水号.批次号啥的,都是直接使用oracle的sequence提供的数字序列号. ...

  3. mysql 文章内容_假设mysql数据库里面有个字段存的是文章内容,用什么方式查询出所有文章中包含某个特定词语的数据。...

    展开全部 like可以查询的,数量巨大了有点耗费资源,特别是同时访问的人数多就惨了.32313133353236313431303231363533e58685e5aeb931333361323464 ...

  4. 只用mysql实现银行转账_基于mysql数据库银行转账功能实现

    import pymysql class TransferMoney(object): # 构造方法 def __init__(self, conn): self.conn = conn self.c ...

  5. mysql inet_aton 原理_基于Mysql的IP处理函数inet_aton()与inet_ntoa()的深入分析_MySQL

    bitsCN.com 有个统计需求,需要对IP进行分类统计,Mysql提供了inet_aton()和inet_ntoa()函数进程处理. 具体可以查看官方手册. INET_ATON(expr)给出一个 ...

  6. 智能窗帘研究制作_基于51单片机智能窗帘的研究与设计

    目录 摘要 . ............................................................................................ ...

  7. MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结

    MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 一.VARCHAR存储和行长度限制 1.VARCHAR(N)中,N指的是字符的长度,VARCHAR类型最大支持65535,指的是 ...

  8. 3制造数据集_基于MBD的产品设计制造技术研究

    本篇节选自论文<基于MBD的产品设计制造技术研究>,发表于<中国电子科学研究院学报>第8卷第6期,作者为中国电子科技集团公司第14研究所专家朱建军.本文经授权转载自公众号学术p ...

  9. mysql数据库约束详解_基于MySQL数据库的数据约束实例及五种完整性约束介绍

    为了防止不符合规范的数据进入数据库,在用户对数据进行插入.修改.删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确.有效.相容. ...

最新文章

  1. java与ios的区别_好奇?Android与iOS究竟有什么区别?终于知道了!
  2. IE浏览器兼容性调整总结技巧
  3. ManulResetEvent与AutoResetEvent
  4. 如何像高级开发人员一样思考?
  5. clobzh字符串缓冲区太小的解决方法_用4K屏玩LOL英雄联盟游戏指针太小解决方法已找到...
  6. 最多添加3个标签,每个标签最长6字,空格或逗号隔开
  7. 一文打尽PHP代码加密方式
  8. 【错误记录】python不常用的一个小操作:安装pip
  9. vs2022 error C1001:内部编译器错误
  10. 实时显示当前时间,每秒更新
  11. dos环境c语言写串口程序,DOS下串口通信程序来传送文件的源代码(转)
  12. 获取top等之类命令的部分打印内容
  13. html禁止浏览器修改字号,放大 Safari 浏览器字号的方法 | 如何修改 iPhone 浏览器字体?...
  14. JS 运行机制最全面的一次梳理
  15. 神马笔记 版本2.1——软件更新·设计篇
  16. unity3D缓存文件占C盘内存,解决办法
  17. Vue Router 路由管理
  18. javascript 计算两个坐标的距离 米_EXCEL VBA曲线坐标计算程序在工程测量中的应用...
  19. <Squeezing Backbone Feature Distributions to the Max for Efficient Few-Shot Learning>
  20. 391高校毕节设计选题

热门文章

  1. Linux 安装rabbitmq
  2. nums和nums[:]
  3. Linux云计算【第一阶段】第十二章:网络管理、进制及SSH管理与攻防
  4. Android 自定义相机黑屏
  5. ubuntu中无法安装vim
  6. Hybrid eye center localization using cascaded regression and hand-crafted model fitting
  7. 方舟服务器建家位置,方舟生存进化新手建家图文攻略 方舟生存进化在哪建家比较好-游侠网...
  8. 修改Office文件的默认打开方式(含C#代码)
  9. 《大前端进阶 Node.js》系列 必知必会必问(面试高频)
  10. 如何让AI让3000位艺术家画同一张画