MySQL优化之应用端优化:MySQL查询高速缓冲

查询缓存会存储SELECT查询的文本以及发送给客户端的相应结果。如果随后收到一个相同的查询,服务器从查询缓存中重新得到查询结果

mysql查询高速缓冲

查询缓存会存储SELECT查询的文本以及发送给客户端的相应结果。如果随后收到一个相同的查询,服务器从查询缓存中重新得到查询结果,而不再需要解析和执行查询。如果有一个不经常改变的表并且服务器收到该表的大量相同查询,查询缓存在这样的应用环境中十分有用。

对于许多Web服务器来说存在这种典型情况,它根据数据库内容生成大量的动态页面。查询缓存不返回旧的数据。当表更改后,查询缓存值的相关条目被清空。如果有许多mysqld服务器更新相同的MyISAM表,在这种情况下查询缓存不起作用。

查询缓存不适用于服务器方编写的语句。如果正在使用服务器方编写的语句,要考虑到这些语句将不会应用查询缓存。

服务器启动时要禁用查询缓存,设置query_cache_size系统变量为0。禁用查询缓存代码后,没有明显的速度提高。编译MySQL时,通过在configure中使用–without-query-cache选项,可以从服务器中彻底去除查询缓存能力。

查询高速缓冲如何工作

查询解析之前进行比较,因此下面的两个查询被查询缓存认为是不相同的:
SELECT * FROM tbl_name
Select * from tbl_name
查询必须是完全相同的(逐字节相同)才能够被认为是相同的。

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

从查询缓存中提取一个查询之前,MySQL检查用户对所有相关数据库和表的SELECT权限。如果没有权限,不使用缓存结果。如果从查询缓存中返回一个查询结果,服务器把Qcache_hits状态变量的值加一,而不是Com_select变量。

如果一个表被更改了,那么使用那个表的所有缓冲查询将不再有效,并且从缓冲区中移出。这包括那些映射到改变了的表的使用MERGE表的查询。一个表可以被许多类型的语句更改,例如INSERT、UPDATE、DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE。COMMIT执行完后,被更改的事务InnoDB表不再有效。使用InnoDB表时,查询缓存也在事务中工作,使用该表的版本号来检测其内容是否仍旧是当前的。

视图产生的查询被缓存。SELECT SQL_CALC_FOUND_ROWS …和SELECT FOUND_ROWS() type类型的查询使用查询缓存。即使因创建的行数也被保存在缓冲区内,前面的查询从缓存中提取,FOUND_ROWS()也返回正确的值。

如果一个查询包含下面函数中的任何一个,,它不会被缓存:
BENCHMARK()
CONNECTION_ID()
CURDATE()
CURRENT_DATE()
CURRENT_TIME()
CURRENT_TIMESTAMP()
CURTIME()
DATABASE()
带一个参数的ENCRYPT()
FOUND_ROWS()
GET_LOCK()
LAST_INSERT_ID()
LOAD_FILE()
MASTER_POS_WAIT()
NOW()
RAND()
RELEASE_LOCK()
SYSDATE()
不带参数的UNIX_TIMESTAMP()
USER()

在下面的这些条件下,查询也不会被缓存:
引用自定义函数(UDFs)。
引用自定义变量。
引用mysql系统数据库中的表。

下面方式中的任何一种:
SELECT …IN SHARE MODE
SELECT …FOR UPDATE
SELECT …INTO OUTFILE …
SELECT …INTO DUMPFILE …
SELECT * FROM …WHERE autoincrement_col IS NULL
最后一种方式不能被缓存是因为它被用作为ODBC工作区来获取最近插入的ID值。

linux

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1872013.html

(0)
上一篇 2025年2月22日 08:50:01
下一篇 2025年2月22日 08:50:50

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • MySQL日志设置优化

    Linux公社(www.linuxidc.com)是专业的Linux系统门户网站,实时发布最新Linux资讯,包括Linux、Ubuntu、Fedora、RedHat、红旗Linux、Linux教程、Linux认证、SUSE 前言 在安装完…

    数据库 2025年2月22日
    300
  • 详解MySQL配置的优化

    最近一直在研究mysql 的优化设置,网上有很多的文章教怎么配置MySQL服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些 最近一直在研究mysql 的优化设置,网上有很多的文章教怎么配置mysql服务器,但考虑到服务器硬件配置的…

    数据库 2025年2月22日
    200
  • MySQL优化-using filesort

    在 MySQL 中 filesort的实现算法实际上是有两种的,一种是首先根据相应的条件取出相应的排序字段和可以直接定位行数据的行指针信 在 mysql 中 filesort的实现算法实际上是有两种的,一种是首先根据相应的条件取出相应的排序…

    数据库 2025年2月22日
    200
  • MySQL使用与优化总结

    在实际应用场景中,我们一般都使用InnoDB作为默认的存储引擎,除了支持事务和行锁是比较重要的两个原因外,其实MyISAM在实际应用 摘要: 这篇文章总结了工作中用到mysql的一些常见问题,,解决方案;合适的使用场景和优化方案。 目录: …

    数据库 2025年2月22日
    200
  • MySQL性能优化之一:提高MySQL并发能力的思路

    1、使用行级别锁,避免表级别或页级别锁尽量使用支持行级别锁的存储引擎,如InnoDB;只在读操作显著多于写作的场景中(如数据仓库类的应用)使用表级别锁的存储引 1、使用行级别锁,避免表级别或页级别锁 尽量使用支持行级别锁的存储引擎,虚拟主机…

    数据库 2025年2月22日
    200
  • mysql应用中常用到的优化

    使用连接池对于访问数据库来说,建立连接的代价比较昂贵,因此,我们有必要建立”连接池”以提高访问的性能。我们可以把连接当作对象或者设备,池中又有许多已经建立的连接,访问本来需要与数据库的连接的地方,都改为和池相连,池临…

    数据库 2025年2月21日
    200
  • MySQL之—优化的图文代码详细介绍

    一个成熟的数据库架构并不是一开始设计就具备高可用、高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善。这篇博文主要谈mysql数据库发展周期中所面临的问题及mysql优化的图文代码详细介绍方案,暂且抛开前端应用不说,大致分为以下五个阶…

    2025年2月21日 数据库
    200
  • 如何优化MySQL到DB2的技术迁移过程?

    如何优化MySQL到DB2的技术迁移过程? 随着技术的不断发展和应用场景的不断扩大,数据库的迁移变得越来越常见。当我们把MySQL迁移到DB2时,我们不仅需要确保数据的完整性和准确性,还需要优化迁移过程,以提升数据的性能和可用性。本文将介绍…

    2025年2月21日
    200
  • 有关mysql优化的一些东东整理

    有关mysql优化的一些东东,自己整理的,网上搜集的,供朋友们学习参考吧 1.查询帮助 ? contents2.使用合成的散列值,分离BLOB或者TEXT3.货币使用定点数(decimal或者numberic)4.sql_mode?5.or…

    数据库 2025年2月21日
    200
  • mysql中什么是大表?什么是大事务?该如何处理?

    本篇文章给大家带来的内容是关于mysql中什么是大表?什么是大事务?该如何处理?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 前言 相对来说,什么情况下的数据库表能够称为“大表”呢? 当一个表的数据超过千万行的时候,就会对…

    数据库 2025年2月21日
    200

发表回复

登录后才能评论