MySQL查询高速缓冲
来源:互联网 发布:冰川网络vr游戏 编辑:程序博客网 时间:2024/06/10 15:46
什么是MySQL查询高速缓冲?
查询缓存存储SELECT查询的文本以及发送给客户端的相应结果。如果随后收到一个相同的查询,服务器从查询缓存中重新得到查询结果,而不再需要解析和执行查询。
缓存的效果如何?
- 如果执行的所有查询是简单的(如从只有一行数据的表中选取一行),但查询是不同的,查询不能被缓存,查询缓存激活率是13%。这可以看作是最坏的情形。在实际应用中,查询要复杂得多,因此,查询缓存使用率一般会很低。
- 从只有一行的表中查找一行数据时,使用查询缓存比不使用速度快238%。这可以看作查询使用缓存时速度提高最小的情况
注意:
查询缓存不返回旧的数据。当表更改后,查询缓存值的相关条目被清空。
如果你有许多mysqld服务器更新相同的MyISAM表,在这种情况下查询缓存不起作用。
服务器启动时要禁用查询缓存,设置query_cache_size系统变量为0。禁用方式是通过在configure中使用--without-query-cache选项,可以从服务器中彻底去除查询缓存能力。
查询高速缓冲工作原理是怎样的?
当查询解析之前先进行比较操作,SELECT * FROMtable_name 和 Select * Fromtable_name被认为是不同的两个操作,也就意味着查询操作必须是逐字节相同的操作语句串才能够使用高速缓冲;同样的查询字符串有可能认为是不同的,如:使用不同的数据库、不同的协议版本或者不同的默认字符集的查询,所以高速缓冲将建立不同的查询缓冲。
当一个表被更改,那么使用那个表的所有缓冲查询将不再有效,并从缓冲区中移出。可能被哪些语句更改呢?它包括:INSERT UPDATEDELETE TRUNCATE ALTER TABLE DROP TABLE 和 DROP DATABASE。
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()
引用自定义函数、变量、Mysql系统数据库中的表。
SELECT ... IN SHARE MODE
SELECT ... FOR UPDATE
SELECT ... INTO OUTFILE...
SELECT ... INTO DUMPFILE ...
SELECT * FROM ... WHERE autoincrement_col IS NULL
使用TEMPORARY 表
不使用任何表
用户有某个表的列集权限。
如何设置查询高速缓冲SELECT 选项?
SQL_CACHE:如果query_cache_type系统变量的值是ON或DEMAND,查询结果被缓存。
SQL_NO_CACHE:查询结果不被缓存。
如何设置查询高速缓冲配置?
通过have_query_cache服务器系统变量指示查询缓存是否可用。
SHOW VARIABLES LIKE 'have_query_cache';
所有查询缓存系统变量名以query_cache_ 开头。为了设置查询缓存大小,设置query_cache_size系统变量。设置为0表示禁用查询缓存。 默认缓存大小设置为0;也就是禁用查询缓存。当设置query_cache_size变量为非零值时,应记住查询缓存至少大约需要40KB来分配其数据结构。(具体大小取决于系统结构)。如果你把该值设置的太小,将会得到一个警告。
SET GLOBAL query_cache_size = 40000;
SHOW WARNINGS/G
如果查询缓存大小设置为大于0,query_cache_type变量影响其工作方式。这个变量可以设置为下面的值: 当一个查询结果(返回给客户端的数据)从查询缓冲中提取期间,它在查询缓存中排序。因此,数据通常不在大的数据块中处理。查询缓存根据数据排序要求分配数据块,因此,当一个数据块用完后分配一个新的数据块。因为内存分配操作是昂贵的(费时的),所以通过query_cache_min_res_unit系统变量给查询缓存分配最小值。当查询执行时,最新的结果数据块根据实际数据大小来确定,因此可以释放不使用的内存。根据你的服务器执行查询的类型,你会发现调整query_cache_min_res_unit变量的值是有用的: 设置query_cache_type变量的GLOBAL值将决定更改后所有连接客户端的缓存行为。具体客户端可以通过设置query_cache_type变量的会话值控制它们本身连接的缓存行为。例如,一个客户可以禁用自己的查询缓存,方法如下: mysql> SET SESSION query_cache_type = OFF; 要控制可以被缓存的具体查询结果的最大值,应设置query_cache_limit变量。 默认值是1MB。 当一个查询结果(返回给客户端的数据)从查询缓冲中提取期间,它在查询缓存中排序。因此,数据通常不在大的数据块中处理。查询缓存根据数据排序要求分配数据块,因此,当一个数据块用完后分配一个新的数据块。因为内存分配操作是昂贵的(费时的),所以通过query_cache_min_res_unit系统变量给查询缓存分配最小值。当查询执行时,最新的结果数据块根据实际数据大小来确定,因此可以释放不使用的内存。根据你的服务器执行查询的类型,你会发现调整query_cache_min_res_unit变量的值是有用的: · 如果大量查询返回大结果(检查 Qcache_total_blocks和Qcache_queries_in_cache状态变量),你可以通过增加query_cache_min_res_unit变量的值来提高性能。但是,注意不要使它变得太大(参见前面的条目)。
- MySQL查询高速缓冲
- MySQL查询高速缓冲详解
- MySQL查询高速缓冲学习
- mysql高速缓冲
- Query cache(高速查询缓冲池)
- MySQL缓冲和无缓冲查询对比
- 数据缓冲区高速缓冲
- 高速缓冲寄存器
- mysql的缓冲查询和非缓冲查询
- MySQL查询的性能优化 - 查询缓冲提高查询速度
- MySQL的高速查询缓存强制要求使用高速缓存
- 段描述符高速缓冲寄存器
- 内存中的高速缓冲页的管理
- 第3章 数据缓冲区高速缓冲
- 段描述符高速缓冲寄存器
- 第三章 数据缓冲区高速缓冲
- Mysql源代码阅读笔记(七)查询缓冲
- MySQL缓冲
- stdarg.h中三个宏va_start ,va_arg和va_end
- 一个男人关心的东西 决定了他的层次
- 摘抄一些比较好的激励性的中英文对译德句子
- 类似于开心网消息提醒功能
- oracle的一些基本语法和一些优化问题
- MySQL查询高速缓冲
- 稍后等于永久
- mysql缓存参数
- 关于MySQL的查询缓存
- 如何使用离线博客发布工具发布CSDN的博客文章
- WTL出现GUID错误 Did you forget to pass the LIBID to CComModule::Init?
- mogilefs文件系统TestCase
- vector
- Stardict